PostgREST API
根据您的 PostgreSQL 模式自动生成 REST API,无需编写后端代码。
启用 PostgREST
PostgREST 按 PostgreSQL 数据库服务器启用。启用步骤:
- 在 sh0 仪表盘中进入数据库服务器。
- 选择一个现有的 PostgreSQL 服务器(或新建一个)。
- 在服务器设置中点击启用 PostgREST。
- sh0 部署一个 PostgREST 实例,将其连接到您的数据库,并配置一个 SSL 域名。
配置
启用 PostgREST 后,您可以在仪表盘中配置以下设置:
匿名角色
anon_role 是用于未认证请求的 PostgreSQL 角色。默认情况下,sh0 会创建一个名为 anon 的角色,对 public 模式只有只读权限。
使用 PostgreSQL 的 GRANT 和 REVOKE 语句控制未认证用户可以访问的内容。
公开的模式
默认情况下,PostgREST 只公开 public 模式。您可以在仪表盘设置中配置要额外公开的模式。未公开模式中的表永远无法通过 API 访问。
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) |
| is | IS (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' 的策略可以根据已认证用户限制可见的行。
OpenAPI 规范
每个 PostgREST 实例都会在其根 URL(GET /)提供实时的 OpenAPI 3.0 规范。可用于:
- 导入 Postman 或 Insomnia 进行测试。
- 使用 openapi-generator 生成带类型的客户端 SDK。
- 接入 Swagger UI 等文档工具。