PostgREST:帮你减少 80% 的后端代码

BBetter Stack
Computing/SoftwareSmall Business/StartupsInternet Technology

Transcript

00:00:00如果你的 Postgres 数据库本身就是 API,而且你完全不需要编写任何后端代码,会怎么样?
00:00:05每次构建 API 时,你都在一遍又一遍地编写相同的后端代码:路由、控制器、验证、认证,这一切只是为了与你的
00:00:14数据库通信。然后你更改了一个列,所有东西都崩了。不需要自定义后端代码,不需要控制器,不需要 ORM 层。
00:00:21这就是 PostgREST 的作用。它是 Supabase 背后的引擎。它能处理繁重的生产流量,而且只需几分钟
00:00:29我就能向你展示如何实现。
00:00:31现在,如果你正在构建 API,这个工具直击整个技术栈中最让人恼火的痛点。
00:00:40逻辑重复。你在数据库中定义了数据,
00:00:44然后你又在其他地方定义访问规则、后端代码和验证。
00:00:49接着我们又在别处做同样的响应处理。同一个系统,多层架构,多重出错的机会。
00:00:56PostgREST 解决了这一切。它在 GitHub 上拥有超过 26,000 颗星,并被 Supabase 用于生产规模。
00:01:03它能在几分钟内将你的模式(Schema)转换为生产就绪的 REST API。没有 ORM,没有控制器。
00:01:10安全机制存在于数据库中,这意味着更少的重复、更少的维护,以及更少的时间花在那些无聊的衔接工作上。
00:01:19让我展示给你看。如果你喜欢能加速工作流的代码工具,请务必订阅。
00:01:24我们经常会发布新视频。
00:01:26好了。现在让我们实际动手构建。好的,这是配置:三个容器。
00:01:32就这样:Postgres、PostgREST 和用于文档的 Swagger UI。
00:01:38这是 Docker Compose 文件。这里没什么复杂的,只是我连接在一起的三个服务。
00:01:45我用万无一失的命令 Docker Compose 启动它。它运行起来了,我也就完工了。
00:01:51不需要安装依赖,不需要设置服务器。现在,让我们看看数据库。
00:01:55我要运行这个 Docker 命令,搞定。一个超级简单的 todos 表:ID、标题、是否完成、创建时间,所有基础字段。
00:02:04这就是全部内容。但接下来的部分才是它真正有用的地方。
00:02:09行级安全性(RLS)。我们直接在数据库内部用 SQL 定义谁可以访问什么。
00:02:17不需要在系统的其他地方编写后端认证逻辑。这是策略内容:
00:02:22我对匿名用户开放了完整权限,设置 using 为 true。所以目前,所有操作都是允许的。现在看好了。
00:02:29我要用这个 curl 命令访问 get todos,搞定。完整的 JSON 数据直接来自 Postgres。
00:02:35没有 API 代码。在此基础上,让我现在过滤一下数据。立即生效。
00:02:41如果我排序,瞧,搞定了。现在让我们创建另一行,发送一个带有 JSON 主体的 POST 请求,这就完成了。
00:02:50数据已经在数据库里了。这里没有 ORM 层在试图追赶进度。
00:02:56这是最让人们惊叹的部分:Open API 文档,自动生成的 Swagger UI。它就在这里。
00:03:04我打开它,我们就得到了一个完整的交互式 API。你可以探索所有内容,测试端点,查看模式。
00:03:11所以从零开始,你在不到一分钟的时间内就拥有了完整的 CRUD、过滤、排序、分页,以及通过 RLS 实现的基础认证和文档。
00:03:21那么,为什么人们会用它呢?好吧,如果这些还不够,那是因为传统的后端工作是有“税收”的。
00:03:26而大部分税收并不是真正的产品开发。实际上我们做的是所有的维护工作,对吧?
00:03:33想想标准的技术栈,也许是 Express、Prisma、控制器、服务、验证都在一个地方。
00:03:40然后认证在另一个地方。你的数据库逻辑又完全在另一个地方。
00:03:45现在对比一下 Postgres。你的模式定义了 API,你的安全性就是 RLS。
00:03:52你的关系已经存在于数据库中了。所以我们不是围绕数据构建翻译层,而是直接正确地暴露数据。
00:04:02这是非常不同的。再对比一下自定义后端,你必须自己编写一切。
00:04:07这确实给了你灵活性,当然,但也给了你更多需要维护的代码。
00:04:13PostgREST 保持简单:REST 加上 Postgres。安全性在数据库中,而不是分散在中间件或路由处理器中。
00:04:23你的维护成本保持在低位,因为你的 API 会跟随你的模式同步。这就是人们喜欢它的原因。
00:04:28坦白说,这也是人们容易陷入麻烦的地方,因为一旦某样东西感觉如此简洁,人们就会表现得像它能解决一切。
00:04:34它并不能解决所有问题,对吧?仍然有一些事情我们需要注意。
00:04:38会有权衡,在动它之前,你应该知道要注意什么。
00:04:43人们喜欢它的原因,嗯,很明显:构建速度快。你可以非常快速地将想法转化为可用的 API。
00:04:51而且它的扩展性也非常好。此外,对吧,Supabase 已经证明了这一点。
00:04:55他们正在使用它。但缺点在于,大量使用行级安全性会增加数据库的负载。
00:05:02所以你需要仔细考虑如何设计。复杂的逻辑可能会迫使你使用大量的 SQL 函数或视图。
00:05:10有些人会喜欢那样,而有些人会讨厌。那么,你应该使用或者甚至尝试它吗?
00:05:15是的,对于合适的项目。如果你在构建原型、MVP 或任何以 Postgres 为中心的东西,那么当然值得一试,对吧?
00:05:23你会开发得更快,写更少的代码,并且通过将规则下沉到数据库中获得更强的安全性默认设置。
00:05:32现在,如果你的应用逻辑非常复杂,你可能仍需要一个薄薄的后端层,比如一个处理边缘情况的小型 BFF 层。
00:05:40但即便如此,Postgres 也可以承担底层的绝大部分重活。所以核心结论是:Postgres 让你发布更快、安全更好、维护更少。
00:05:50你的数据库成为了真实数据的源头,而你的 API 是从中自然衍生出来的,而不是变成一个独立的系统。
00:05:58如果你喜欢这类编程工具和技巧,请务必订阅 Better Stack 频道。我们下个视频见。

Key Takeaway

通过将业务逻辑和安全性下沉到数据库行级安全性(RLS)中,PostgREST 消除传统后端的翻译层,使数据库模式直接自然衍生为生产级 REST API。

Highlights

PostgREST 能够减少 80% 的后端代码编写工作,通过直接将 Postgres 数据库模式转换为 REST API 来消除对控制器和 ORM 层的需求。

该工具在 GitHub 上拥有超过 26,000 颗星,并作为核心引擎支持 Supabase 处理生产级别的流量。

安全性通过数据库内置的行级安全性(RLS)实现,无需在应用层编写重复的身份验证逻辑。

系统能够基于数据库架构自动生成完整的 Swagger UI 和 Open API 文档,实现交互式 API 探索。

部署仅需三个 Docker 容器即可完成,分别运行 Postgres 数据库、PostgREST 引擎和 Swagger UI 文档服务。

开发者可以在不到一分钟的时间内从零开始构建具备 CRUD、过滤、排序和分页功能的生产就绪接口。

Timeline

传统后端架构的重复性成本

  • 传统开发模式在路由、控制器和验证环节存在大量逻辑重复。
  • 多层架构增加了数据一致性出错的概率。
  • 数据库列的任何更改都会导致现有后端和 ORM 层崩溃。

开发 API 时反复编写相同的衔接工作被称为“后端税”。这种税收消耗了大量产品开发时间,用于维护 Express、Prisma、控制器和验证层之间的同步。PostgREST 通过让数据库本身充当 API 来取消这些多余的中间层。

容器化部署与基础表结构搭建

  • 标准配置由 Postgres、PostgREST 和 Swagger UI 三个容器组成。
  • Docker Compose 文件可快速连接服务,无需手动安装依赖或设置服务器。
  • 简单的 todos 表结构包含 ID、标题、完成状态和创建时间等基础字段。

部署过程非常精简,仅需执行一次 Docker Compose 启动命令。开发者无需配置复杂的服务器环境或安装特定语言的运行环境。基础数据库表建立后,系统即可立即进入功能配置阶段。

行级安全性与即时 API 生成

  • 行级安全性(RLS)允许直接在 SQL 中定义数据访问规则。
  • curl 请求可以直接获取 Postgres 输出的完整 JSON 数据。
  • 系统自动提供 CRUD、过滤、排序和分页功能,且与数据库模式同步更新。

通过设置 RLS 策略,安全性被锁定在数据层而非中间件中。发送 POST 请求时,数据直接进入数据库,没有任何 ORM 层在中间尝试追赶进度。所有 RESTful 交互功能均在不到一分钟内自动激活,包括自动生成的交互式 Swagger 文档。

性能权衡与适用场景评估

  • 大量使用 RLS 策略会增加数据库服务器的计算负载。
  • 复杂业务逻辑可能导致对 SQL 函数和视图的过度依赖。
  • 对于极度复杂的应用逻辑,建议配合薄薄的 BFF 适配层使用。

PostgREST 的优势在于开发速度快和安全性默认级别高,非常适合原型设计、MVP 或以数据库为中心的项目。虽然它能承担大部分重活,但开发者需要注意数据库设计以应对可能的负载增加。最终目标是将数据库视作真实数据的源头,让 API 成为其自然延伸。

Community Posts

View all posts