文档/ 后端即服务/ PostgREST API

PostgREST API

根据您的 PostgreSQL 模式自动生成 REST API,无需编写后端代码。

启用 PostgREST

PostgREST 按 PostgreSQL 数据库服务器启用。启用步骤:

  1. 在 sh0 仪表盘中进入数据库服务器。
  2. 选择一个现有的 PostgreSQL 服务器(或新建一个)。
  3. 在服务器设置中点击启用 PostgREST。
  4. sh0 部署一个 PostgREST 实例,将其连接到您的数据库,并配置一个 SSL 域名。
Tip
PostgREST 仅适用于 PostgreSQL 服务器,不支持 MySQL、MariaDB、Redis 和 MongoDB。

配置

启用 PostgREST 后,您可以在仪表盘中配置以下设置:

匿名角色

anon_role 是用于未认证请求的 PostgreSQL 角色。默认情况下,sh0 会创建一个名为 anon 的角色,对 public 模式只有只读权限。

使用 PostgreSQL 的 GRANT 和 REVOKE 语句控制未认证用户可以访问的内容。

公开的模式

默认情况下,PostgREST 只公开 public 模式。您可以在仪表盘设置中配置要额外公开的模式。未公开模式中的表永远无法通过 API 访问。

Warning
切勿公开 pg_catalog 或 information_schema 模式。只公开包含您希望通过 API 访问的表的模式。

查询语法

PostgREST 使用查询参数来过滤、排序、分页和调整响应结构。所有端点都遵循以下格式:

GET https://<your-domain>/<table_name>?select=<columns>&<filters>

过滤

使用带运算符的列级过滤器:

运算符含义示例
eq等于?status=eq.active
neq不等于?role=neq.admin
gt / gte大于 / 大于等于?age=gte.18
lt / lte小于 / 小于等于?price=lt.100
like / ilike模式匹配(区分 / 不区分大小写)?name=ilike.*john*
in在列表中?id=in.(1,2,3)
isIS (null, true, false)?deleted_at=is.null

分页

使用 Range 请求头,或 limit 和 offset 查询参数:

GET /users?limit=20&offset=40&order=created_at.desc

资源嵌入(连接)

PostgREST 会自动检测外键关系,并支持嵌入关联资源:

GET /orders?select=id,total,customer(name,email)

这会返回每个订单,并在响应中嵌入关联客户的姓名和邮箱。

使用 JWT 认证

PostgREST 会验证通过 Authorization 请求头传入的 JWT 令牌。提供有效的 JWT 时,PostgREST 会切换到令牌 role 声明中指定的角色,并将所有声明设置为 PostgreSQL 会话变量。

这与 PostgreSQL 的行级安全(Row-Level Security,RLS)策略集成。例如,检查 current_setting('request.jwt.claims')::json->>'sub' 的策略可以根据已认证用户限制可见的行。

Tip
将 PostgREST 与 sh0 的 认证服务(Logto) 搭配使用,即可获得完整的认证流程。Logto 签发的 JWT 可由 PostgREST 直接验证。

OpenAPI 规范

每个 PostgREST 实例都会在其根 URL(GET /)提供实时的 OpenAPI 3.0 规范。可用于:

  • 导入 Postman 或 Insomnia 进行测试。
  • 使用 openapi-generator 生成带类型的客户端 SDK。
  • 接入 Swagger UI 等文档工具。