作者: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
之后,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
接下来可以执行以下命令,查询前文提到的 product
表:
curl localhost:3000/product
得到如下结果反馈:
[{