prest/prest · 上手攻略

  • 仓库:prest/prest
  • 链接:https://github.com/prest/prest
  • 分类:skill
  • 作者:Tom
  • 更新:2026-08-27

是什么

pREST(PostgreSQL REST,读作 "prest")是一个生产可用的后端工具,能在已有的或新建的 PostgreSQL 数据库上瞬间生成 RESTful API 和 MCP(Model Context Protocol)接口,无需手写后端代码。官方定位是"low-code simplify and accelerate development",核心功能包括:

  • CRUD REST API:对任意表自动生成 GET/POST/PUT/DELETE 端点
  • 自定义 SQL 路由:通过 _QUERIES 脚本模板执行复杂查询
  • 权限控制(ACL):基于 JWT 和表/列级别的访问控制
  • MCP 接口:v2.1.0+ 支持 AI Agent 通过 MCP 协议读写数据库
  • 多数据库路由:同一实例支持连接多个 PostgreSQL 数据库

最新版本为 v2.4.2(2026 年初),Go 语言编写,单二进制部署,文档详见 docs.prestd.com

解决什么问题

传统开发中,为数据库提供 HTTP 接口需要:写 CRUD 代码 → 配置路由 → 写权限校验 → 部署服务。pREST 把这一链路压缩到配置 + 启动两步:

  • 给现有 PostgreSQL 数据库(业务数据库或新库均可)立刻拥有 HTTP 接口
  • AI Agent(Claude、Cursor 等)可以通过 MCP 协议直接查询数据库
  • 快速搭建内部管理后台、数据看板后端,不需要单独写 API 服务

快速安装

方式一:Docker(推荐,最快)

docker run -d \
  --name prestd \
  -p 3000:3000 \
  -e PREST_PG_URL=postgres://user:password@host:5432/mydb \
  prest/prest:v2.4.2

访问 http://localhost:3000 即可。

方式二:Homebrew(macOS/Linux)

brew install prestd
# 或 MCP 专用适配器(stdio ↔ HTTP 桥接)
brew install prest/tap/prest-mcp

方式三:Go 直接安装

go install github.com/prest/prest/v2/cmd/prestd@v2.4.2

方式四:下载二进制

GitHub Releases 下载对应平台的压缩包,解压即用,无需 Go 环境。

环境变量配置

变量 说明 示例
PREST_PG_URL PostgreSQL 连接字符串 postgres://user:pass@localhost:5432/mydb
DATABASE_URL 同上,兼容 Rails/其他框架格式 同上
PREST_JWT_KEY JWT 签名密钥(≥32 字节,v2.4.2 强制) your-secret-key-min-32-bytes-here
PREST_AUTH_ENABLED 开启认证 true

核心用法

1. 自动 CRUD

连接数据库后,直接用 HTTP 访问任意表:

# 获取 users 表所有数据(公开模式需开启匿名访问)
curl http://localhost:3000/public/users

# 带过滤条件
curl "http://localhost:3000/public/users?age=gte:18&name=ilike:john%"

# 分页
curl "http://localhost:3000/public/users?_page=2&_page_size=20"

# 排序
curl "http://localhost:3000/public/users?_order=created_at:desc"

# 只取特定字段
curl "http://localhost:3000/public/users?_select=id,name,email"

2. 插入 / 更新 / 删除

# 插入
curl -X POST http://localhost:3000/public/articles \
  -H "Content-Type: application/json" \
  -d '{"title": "Hello World", "slug": "hello-world", "content": "..."}'

# 更新
curl -X PUT http://localhost:3000/public/articles \
  -H "Content-Type: application/json" \
  -d '{"title": "Updated Title"}' \
  "?slug=eq:hello-world"

# 删除
curl -X DELETE "http://localhost:3000/public/articles?slug=eq:hello-world"

3. 自定义 SQL 查询(_QUERIES)

.sql 文件放入配置的 _QUERIES 目录后,可通过 REST 路径调用:

# queries/myquery.sql
# SELECT * FROM articles WHERE slug = {{.slug}}
curl "http://localhost:3000/_QUERIES/myquery?slug=hello-world"

⚠️ 安全注意:pREST 会对插值进行审查,拒绝包含引号、--:: 等 SQL 关键字模式的自由文本。对于用户提供的搜索词,建议使用绑定变量而非插值:

-- ✅ 推荐:使用 {{sqlVal "key"}} 绑定参数
SELECT * FROM articles WHERE slug = {{sqlVal "slug"}}

-- ⚠️ 自由插值会被拒绝(slug 含空格/关键字时)
SELECT * FROM articles WHERE slug = '{{.slug}}'

4. MCP 接口(AI Agent 接入)

v2.1.0 起,在同一 prestd 进程提供 /_mcp 端点,AI 客户端(如 Claude Desktop、Cursor)可直接探索数据库 schema、读取表数据,无需单独配置 MCP 适配器。

对于需要 stdio 模式的 AI 客户端(如 Claude Code),使用 prest-mcp 适配器作为 HTTP ↔ stdio 桥接:

# 启动 MCP 适配器
prest-mcp --prest-url http://localhost:3000

AI 客户端配置示例(claude_desktop_config.json):

{
  "mcpServers": {
    "prestd": {
      "command": "prest-mcp",
      "args": ["--prest-url", "http://localhost:3000"]
    }
  }
}

5. JWT 认证

# 登录获取 token(需预先配置用户)
curl -X POST http://localhost:3000/_TOKEN \
  -H "Content-Type: application/json" \
  -d '{"username": "admin", "password": "secret"}'

# 后续请求带上 token
curl http://localhost:3000/private/users \
  -H "Authorization: Bearer <token>"

典型适用场景

场景 说明
内部工具快速后端 给 PostgreSQL 数据库瞬间加一层 HTTP 接口,省去独立 API 服务
AI Agent 数据库查询 Claude/Cursor 通过 MCP 协议直接读数据库,无需手写 SQL
SaaS 多租户数据路由 通过多数据库配置,隔离不同租户的数据
数据看板/报表后端 为 BI 工具提供统一 REST 接口
快速原型验证 前端先行,后端 API 用 pREST 生成,后期再替换为手写服务

坑与注意

⚠️ v2.4.2 JWT key 强制最低长度:HMAC JWT key 必须 ≥32 字节,不足时服务启动时 auth 自动禁用(而非报错),可能造成安全漏洞,务必确认 key 长度。

⚠️ MCP 接口为只读:v2.1.0 起 MCP 仅支持 schema 发现和 SELECT 操作,不支持 INSERT/UPDATE/DELETE;写操作仍通过 REST API。

⚠️ PostgreSQL only(当前):官方当前仅支持 PostgreSQL 及部分兼容引擎(见 roadmap)。MySQL、MongoDB 等暂不支持。

⚠️ SQL 插值安全需主动防御:pREST 的 _QUERIES 审查机制仅对插值做文本过滤,不等于参数化查询;使用 {{sqlVal}} 绑定变量是正确做法。

⚠️ 生产环境建议加 Nginx 反向代理:pREST 本身不提供速率限制,_QUERIES 脚本路径可能暴露业务逻辑,建议外层加 API Gateway 或 Nginx 限制并发。

⚠️ pgvector 支持:v2.4.0 起内置 pgvector 支持,但向量检索仍需手写 SQL 查询,pREST 不会自动生成向量搜索端点。

⚠️ JWT key 密钥管理:key 建议通过环境变量注入,不要明文写在配置文件里。

与同类对比

工具 类型 特点 适合谁
pREST 开源(Go) REST + MCP 双接口、CRUD 即开即用 已有 PG 数据库的快速 API 化
DreamFactory 商业 SaaS 多数据库、API 管理界面 企业级多数据源统一 API
PostgREST 开源(Haskell) 纯 REST,理念与 pREST 相近 追求极简、不需要 MCP 的场景
Supabase 商业 + 开源 PG 之上的完整 BaaS,REST + Auth + Realtime 需要完整后端能力的项目
Hasura 商业 + 开源 GraphQL + REST,PG 支持强大 需要 GraphQL 接口的团队
pgEdge MCP Server 开源 独立 PG MCP Server 需要标准 MCP 但不需要 REST 的场景

pREST 的差异化在于:REST + MCP 双协议共存Go 二进制单文件部署极简、对已有 PG 数据库的零侵入接入。缺点是生态和周边工具不如 Supabase/Hasura 丰富。

一句话推荐结论

已有 PostgreSQL 数据库、想快速为它加上 HTTP 接口或让 AI Agent 直接查询时,pREST 是目前最轻量的选择——单二进制启动即用,v2.4.2 + MCP 支持让它同时覆盖人类开发者和 AI 代理两类消费者;需要多数据库、更强生态或商业支持则考虑 Supabase/Hasura。