• 译文 | 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
  • 相关阅读:
    【HMS Core】Android引入Scan Kit导致System.loadLibrary无法使用该如何解决?
    品牌百度百科词条创建方法是什么?品牌百科怎么创建?
    【线性代数基础】
    STM32-看门狗
    原来 TinyVue 组件库跨框架(Vue2、Vue3、React、Solid)是这样实现的?
    算法、语言混编、分布式锁与分布式ID、IO模型
    VC编译器编译命令cl、rc、link
    Python采集剧本杀店家数据信息,做可视化演示
    谷粒商城项目总结(一)-基础篇
    如何理解BFC
  • 原文地址:https://blog.csdn.net/ApacheAPISIX/article/details/128143465