PostgREST 是一个独立的 Web 服务器,可为您的 PostgreSQL 数据库直接生成 RESTful API。 数据库中的结构约束和权限决定了 API 的端点(endpoints)和操作。
PostgREST 是手动编写 CRUD 的替代方案。通常的 API 服务器普遍遇到遇到一个问题。那就是编写业务逻辑往往会重复劳动,并且对于数据结构存在疏漏。对象关系(Object-relational)映射是一种存疑(leaky)的抽象,可能导致产生低效的代码。PostgREST 哲学建立了一个单一的声明性真理来源————数据本身。
比起对着查询结果重复劳动,让查询计划理清细节使 PostgreSQL 为您添加数据是一件更容易的事。为数据库对象分配权限比在控制器(controllers)中添加保护更容易(这对于数据依赖关系中的级联权限尤其如此)。并且设置约束比编写重复代码进行健全检查更容易。
没有 ORM 参与。创建 SQL 性能提示的视图。数据库管理员(DA)现在可以自行创建 API,无需开发参与。
1970年,E. F. Codd 在他的文章 “大型共享数据库数据关系模型” 中批评了当时主导的数据库分层模型。于都文章会发现层次数据库和嵌套 http 路由之间存在惊人相似性。而在 PostgREST 中,我们尝试使用灵活的过滤和嵌入,而不是嵌套路由。
PostgREST 有一个重要的特点。它适用于如 Nginx 的工具。这可以强行将以数据为中心的 CRUD 操作与其他问题进行干净分离。
与任何开源项目一样,我们都可以从工具中的功能和修复中获益。这比在各自私有库中耦合的改进更有益处。
PostgREST 具有不断增长的生态系统,示例、库、实验和用户。这是一个选择。
- tomberek/aor-postgrest-client - JS, admin-on-rest
- hugomrdias/postgrest-url - JS, just for generating query URLs
- john-kelly/elm-postgrest - Elm
- mithril.postgrest - JS, Mithril
- lewisjared/postgrest-request - JS, SuperAgent
- JarvusInnovations/jarvus-postgrest-apikit - JS, Sencha framework
- davidthewatson/postgrest_python_requests_client - Python
- calebmer/postgrest-client - JS
- clesiemo3/postgrestR - R
- PierreRochard/postgrest-angular - TypeScript, generate UI from API description
- thejettdurham/postgrest-sharp-client (needs maintainer) - C#, RestSharp
在于外部交互上(LISTEN/NOTIFY)PostgreSQL 有拓展到外部队列进行进一步处理的网桥。这允许存储过程在数据库外发起动作,例如发送电子邮件。
- frafra/postgresql2websocket - Websockets
- matthewmueller/pg-bridge - Amazon SNS
- aweber/pgsql-listen-exchange - RabbitMQ
- SpiderOak/skeeter - ZeroMQ
- FGRibreau/postgresql-to-amqp - AMQP
- subzerocloud/postgrest-starter-kit - Boilerplate for new project
- NikolayS/postgrest-google-translate - Calling to external translation service
- CodeforAustralia/heritage-near-me - Elm and PostgREST with PostGIS
- timwis/handsontable-postgrest - An excel-like database table editor
- Recmo/PostgrestSkeleton - Docker Compose, PostgREST, Nginx and Auth0
- benoror/ember-postgrest-dynamic-ui - generating Ember forms to edit data
- ruslantalpa/blogdemo - blog api demo in a vagrant image
- timwis/ext-postgrest-crud - browser-based spreadsheet
- srid/chronicle - tracking a tree of personal memories
- diogob/elm-workshop - building a simple database query UI
- marmelab/ng-admin-postgrest - automatic database admin panel
- myfreeweb/moneylog - accounting web app in Polymer + PostgREST
- tyrchen/goodfilm - example film api
- begriffs/postgrest-example - sqitch versioning for API
- SMRxT/postgrest-demo - multi-tenant logging system
- PierreRochard/postgrest-boilerplate - example auth backend
- Catarse
- iAdvize
- Redsmin
- Image-charts
- Drip Depot
- OpenBooking
- Convene by Thomson-Reuters
- eGull
- ppKrauss/PostgREST-writeAPI - generate Nginx rewrite rules to fit an OpenAPI spec
- diogob/postgrest-ws - expose web sockets for PostgreSQL's LISTEN/NOTIFY
- pg-safeupdate - Prevent full-table updates or deletes
- srid/spas - allow file uploads and basic auth
- svmnotn/postgrest-auth - OAuth2-inspired external auth server
- nblumoe/postgrest-oauth - OAuth2 WAI middleware
- subZero - Automated GraphQL & REST API with built-in caching (powered in part by PostgREST)
"开发起来太快了, 感觉就像在作弊!"
—François-G. Ribreau
- "我不得不说, 与 Node.js/Waterline ORM 构建的 API 对比
- CPU/Memory usage 简直是难以置信. 当我们在 6 个示例 (dynos) 持续求情 1GB 数据是它甚至只有 60/70 MB 大小."
—Louis Brauer
"我非常喜欢这样一个事实,偶然使用 SQL DDL(和 V8 javascript)开发微服务。 我们在 6 个月内完全重写了一个 Spring + MySQL 遗留应用程序。 速度快 10 倍,代码很简洁。而之前的人用了 4 个人花了 3 年时间。"
—Simone Scarduzio
该项目有一个友好且不断成长的社区。加入我们的 聊天室 来讨论和求助。同时你也可以在 Github 的 issues 上搜索 bugs/features。