• 译文 | A poor man‘s API


    作者:Nicolas Fränkel
    翻译:Sylvia
    https://blog.frankel.ch/poor-man-api/

    在 API 日渐流行的年代,越来越多的非技术人员也希望能从 API 的使用中获利,而创建一套成熟的 API 方案需要时间成本和金钱两方面的资源加持。在这个过程中,你需要考虑模型、设计、REST 原则等,而不仅仅是编写一行代码。

    如何打造一个具有高性价比且能持续迭代的产品,成为越来越多技术团队的目标。本文将展示如何在不编写任何代码的情况下,简单实现一个 API 实践。

    方案初试

    该解决方案主要使用的是 PostgreSQL 数据库,PostgreSQL 是一个开源 SQL 数据库。同时我们没有编写 REST API,而是使用了 PostgREST 组件。

    PostgREST 是一个独立的 Web 服务器,它可以将 PostgreSQL 数据库直接转换为 RESTful API。如果你想了解 PostgREST 的使用方法,可以参考入门指南文档,内容非常全面且开箱即用。

    接下来,我们将它应用到一个简单的示例中。

    具体步骤

    以下过程你可以在 GitHub 上找到完整源代码。
    下方展示了一个通过 CRUD API 公开的 product 表。

    在这里插入图片描述

    由于我没有找到任何现成的 Docker 镜像,所以我单独创建了一份新的 Dockerfile。其中主要涉及依赖项的安装和参数化数据生成。

    Dockerfile

    FROM debian:bookworm-slim                                                   
    ARG POSTGREST_VERSION=v10.1.1                                               
    ARG POSTGREST_FILE=postgrest-$POSTGREST_VERSION-linux-static-x64.tar.xz     
    RUN mkdir postgrest
    WORKDIR postgrest
    ADD https://github.com/PostgREST/postgrest/releases/download/$POSTGREST_VERSION/$POSTGREST_FILE \
        .                                                                       
    RUN apt-get update && \
        apt-get install -y libpq-dev xz-utils && \
        tar xvf $POSTGREST_FILE && \
        rm $POSTGREST_FILE
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    之后,Docker 镜像在 /postgrest 文件夹中会包含一个名为 postgrest 的可执行文件。这里可以通过 Docker Compose 来部署:

    docker-compose.yml

    version: "3"
    services:
      postgrest:
        build: ./postgrest                                   
        volumes:
          - ./postgrest/product.conf:/etc/product.conf:ro    
        ports:
          - "3000:3000"
        entrypoint: ["/postgrest/postgrest"]                 
        command: ["/etc/product.conf"]                       
        depends_on:
          - postgres
      postgres:
        image: postgres:15-alpine
        environment:
          POSTGRES_PASSWORD: "root"
        volumes:
          - ./postgres:/docker-entrypoint-initdb.d:ro
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    接下来可以执行以下命令,查询前文提到的 product 表:

    curl localhost:3000/product
    
    • 1

    得到如下结果反馈:

    [{
       
    • 1
  • 相关阅读:
    论文阅读【8】Conditional Random Fields: An Introduction
    h5st 4.3版本代码研究
    【ASM】字节码操作 Label 如何使用 生成 if 语句
    HTTP协议简单理解
    性能测试之cpu 分析
    【C++】之类和对象 - const成员函数
    TDengine支持多种写入协议,四种写入方式提效大全
    lavaweb【初识后续问题的解决】
    R语言LDA、CTM主题模型、rjags 吉布斯gibbs采样文本分析论文摘要、通讯社数据
    搭建一个Vue3+Ts+Vite项目
  • 原文地址:https://blog.csdn.net/ApacheAPISIX/article/details/128143465