十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

PostgREST 快速上手指南:最短路径把 PostgreSQL 表变成 REST API

PostgREST 快速上手指南:最短路径把 PostgreSQL 表变成 REST API PostgREST 快速上手指南最短路径把 PostgreSQL 表变成 REST API【免费下载链接】postgrestREST API for any Postgres database项目地址: https://gitcode.com/GitHub_Trending/po/postgrestPostgREST 是一个独立 Web 服务器能把 PostgreSQL 数据库的表和视图直接暴露为 PostgreSQL REST API不写 ORM、不手写接口端点由数据库结构自动生成权限全部交给数据库本身。下面这条最短路径会带你在本地装好 PostgREST、配好最小安全模型并真正发出第一个请求。先想清楚PostgREST 适合你吗如果你的需求是「把已有表的数据开放给前端或第三方调用」PostgREST 是成本最低的选择——新增一张表就多一个端点完全不用碰后端代码。但如果你要做的是复杂业务编排跨服务调用、复杂事务流程那还是应该选传统后端框架PostgREST 可以退居为其中的「数据访问层」。场景建议存量表的 CRUD、管理后台、内部数据服务选 PostgREST权限想完全由数据库统一管理选 PostgREST复杂业务逻辑、跨服务编排传统后端为主PostgREST 只做数据层选一条部署路线本地开发一条命令起步本地试水最省事的是包管理器macOS 用brew install postgrestArch Linux 用pacman -S postgrest依赖libpq 客户端库都会被自动处理。装完先验证一下postgrest --help能打印出用法和版本号就说明可用。如果报libpq.so之类的加载错误补装 PostgreSQL 客户端库即可Ubuntu/Debian 是apt-get install libpq-dev。上生产容器化部署上生产建议用官方镜像 docker-compose让数据库和服务一起跑宿主机什么都不用装。PostgREST 镜像基于 Nix 构建最终体积只有约 14MB # docker-compose.yml version: 3 services: server: image: postgrest/postgrest ports: - 3000:3000 environment: PGRST_DB_URI: postgres://app_user:passworddb:5432/app_db # 数据库连接串 depends_on: - db db: image: postgres environment: POSTGRES_DB: app_db POSTGRES_USER: app_user POSTGRES_PASSWORD: password容器内一切配置都走PGRST_前缀的环境变量改配置 改环境变量重启即生效。docker compose up -d之后3000 端口就是你的 API。把安全设计好角色与行级安全PostgREST 的授权模型只有一句话它自己不鉴权全部委托给 PostgreSQL 角色。请求进来后它先以「认证器角色」连库再根据 JWT 里的role声明切换到目标角色没有令牌就用匿名角色。 三类角色分工如下认证器authenticator连接入口只保留「切换到其他角色」的资格本身不碰业务表。匿名角色anon无令牌请求默认使用权限最小通常只给只读。用户角色JWT 验证通过后切换过去可多用户共用也可一人一角色。创建这套最小角色组合-- 入口角色只负责建连NOINHERIT 保证它不继承任何业务权限 CREATE ROLE authenticator LOGIN NOINHERIT PASSWORD pass; -- 匿名角色与用户角色都不允许直接登录 CREATE ROLE anon NOLOGIN; CREATE ROLE todo_user NOLOGIN; GRANT anon TO authenticator; GRANT todo_user TO authenticator; GRANT USAGE ON SCHEMA public TO anon, todo_user; GRANT SELECT ON public.todos TO anon; -- 匿名只读 GRANT SELECT, INSERT, UPDATE, DELETE ON public.todos TO todo_user; -- 用户可写关键就一条authenticator绝不能持有业务表权限。这样即使连接串泄露也拿不到数据。再细一层的隔离交给行级安全RLS——「每个用户只看到自己的待办」ALTER TABLE public.todos ENABLE ROW LEVEL SECURITY; CREATE POLICY own_todos ON public.todos USING (user_id current_setting(request.jwt.claims, true)::json-sub);JWT 只是标准 HS256 令牌role决定切到哪个数据库角色sub等字段则可以在 SQL 里读取、参与 RLS 判断二者配合就是完整的安全闭环只配这几项就能跑完整参数见官方配置文档起步只需要这 5 项# postgrest.conf db-uri postgres://authenticator:passlocalhost:5432/todo # 连接入口 db-schemas public # 哪些 schema 暴露为 API db-anon-role anon # 无令牌请求使用的角色 jwt-secret change-me-to-a-32-char-secret # JWT 校验密钥 server-port 3000 # 监听端口启动postgrest postgrest.conf在容器或 CI 里不想改文件时可以用环境变量覆盖同名参数PGRST_前缀 参数名大写且优先于配置文件PGRST_SERVER_PORT8080 postgrest postgrest.conf # 临时把端口改成 8080发出第一个请求示例表todos(id serial primary key, user_id uuid, task text, done boolean)建好、权限授好后启动服务用 3 个请求验证链路# 1. 查全部不带令牌以 anon 角色只读 curl http://localhost:3000/todos # 2. 过滤 排序只看未完成项?列操作符.值 可作用于任意列 curl http://localhost:3000/todos?doneeq.falseordercreated_at.desc # 3. 更新带 roletodo_user 的 JWT 才能写 curl -X PATCH http://localhost:3000/todos?ideq.1 \ -H Authorization: Bearer your-jwt \ -d {done: true}第一条只能读到数据、写不了——正是前面最小权限配置的效果第三条若令牌缺失或签名不对会直接收到 401/403说明安全模型已生效。到这里一个可用、可控的 PostgreSQL REST API 就跑起来了新增表、视图或函数函数会暴露成 RPC 端点都会自动生成对应端点。下一步建议把 JWT 接到真实登录系统再用 RLS 做按用户的数据隔离——这套组合拳就是 PostgREST 在生产环境里的标准姿势。【免费下载链接】postgrestREST API for any Postgres database项目地址: https://gitcode.com/GitHub_Trending/po/postgrest创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表