写点什么

PostgREST:来自 GitHub 的 PostgreSQL API

  • 2015-07-27
  • 本文字数:1684 字

    阅读完需:约 6 分钟

1986 年,美国伯克利大学开始了由 DARPA NSF 等赞助的 POSTGRES 数据库项目的研究。该项目后来成功应用到财务数据分析系统、小行星跟踪数据库等多个领域。1994 年,Postgres95 继承了 POSTGREST 代码,并成为开源项目,供全世界用户免费使用。1996,该项目正式更名为 PostgreSQL 。目前,PostgreSQL 已经成为最先进的开源数据库系统,提供多版本并行控制,支持子查询 / 事物 / 用户自定义函数和类型等几乎所有 SQL 构件,并且可以获得 C/C++/Java/phthon 等很多语言的绑定。作为开源项目,PostgreSQL 的开发团队主要为志愿者。为了更好的促进 PostgreSQL 的发展和应用, GitHub 近期公开了为现有的 PostgreSQL 数据库提供 RESTful API 服务的 PostgREST API 。接下来,本文就对 PostgREST API 进行简要介绍。

首先,表征状态传输(REpresentational State Transfer,REST)描述了一个架构样式的网络系统,包含了一组架构约束条件和原则。作为RESTful API,PostgREST 则是满足了REST 要求的约束条件和原则。相比于一个新的API,它提供了一个更加简洁、更加与相关标准兼容和更快速的API。

目前,PostgREST 项目的源代码二进制文件都已经托管在GitHub 中。用户可以直接通过postgrest 命令,并配合db-port 等参数进行执行。在实际的使用中,参数列表还可以包含secure 选项,用于把所有的请求重定向到HTTPS 中。此外, herokuapp 网站还提供了演示案例。这些案例模拟 postman 等 HTTP 客户端向 demo 服务器发送请求。其中,演示数据库的结构由 begriffs/postgrest-example 定义。

在性能方面,PostgREST 表现优越。在 Heroku 中每秒至多 2000 个请求的情况下进行测试,PostgREST 保证了亚秒级的反应时间。这主要得益于三个方面:服务器由使用 Warp HTTP 服务器的 Haskell 所编写;把在 SQL 中进行串行化 JSON 反应、数据验证、身份忍者、数行和收回进行结合、在单个命令行中进行 Data post 等计算尽可能的放到数据库中;通过重新使用准备的声明、保持 db 连接池、使用 Postgres 二进制协议以及保持无状态以允许水平扩展等利用 Hasql 库实现数据库的高效使用。

在安全方面,PostgREST 处理身份认证,并把认证放置到数据库中定义的人员信息中,以保证只有一个单独的信任源。当与数据库进行交互时,服务器会使用当前认证的用户身份,并把连接持续期间能做的事情局限为当前用户的权限内。未来,PostgreSQL 9.5 将会支持行级别安全(row-level security)。同时,还没有被实现的安全机制也能够利用trigger 和security-barrier view 进行仿真。由于数据库的访问都因为使用 leakproof 函数而局限在一定的模板内,触发器并不会损害行级别的安全。

在版本(versioning)方面,PostgREST 通过 HTTP 内容协商支持多版本共存。来自某个版本的请求会被翻译成为数据库中表格内容的交换。而 PostgreSQL 策略搜索路径允许来自之前版本的表格在后续版本中进行完全重用。文档方面,PostgREST 并没有采用传统的用户自行编写和维护文档的方式。它采用 HTTP 让 API 解释自己的可供性(affordance)。所有的 PostgREST 路径都会对 OPTIONS 进行反应,解释他们所支持的内容以及 JSON 负载的数据格式。

最后,在数据完整性方面,postgrest 并不依靠 Object Relational Mapper 和自定义的命令代码。该系统需要用户把声明式约束直接放到数据库中。这样,没有任何应用可以对数据造成破坏。此外,PostgREST 还在 HTTP 接口设置了安全守卫(safeguard),从而避免强制 idempotent PUT 请求等情况的出现。

未来,PostgREST 会继续进行更新。其未来的特性包括:利用 socket 和 Postgres pubsub 来观察路径的变化、制定每个 view 的 HTTP 缓冲、从 Postgres 状态收集器中推断出好的默认抓取策略、产生测试客户端的 mock 数据、每个用户维护单独的连接池以避免‘set/reset role’导致的性能下降、利用链路头描述更多的关系等。


感谢徐川对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群)。

2015-07-27 08:486543
用户头像

发布了 268 篇内容, 共 137.9 次阅读, 收获喜欢 24 次。

关注

评论

发布
暂无评论
发现更多内容

深入解析YashanDB事务管理机制,提升数据一致性

数据库砖家

迈旗招聘相关系统介绍

微擎应用市场

深入了解YashanDB数据库的高效存储与数据检索技术

数据库砖家

深入挖掘YashanDB数据库的基本构成

数据库砖家

解码、优化、跃迁:MyEMS 驱动能源管理从经验到数据的范式升级

开源能源管理系统

开源 开源能源管理系统

上汽荣威携手火山引擎,豆包·深度思考模型全球首发上车M7 DMH

新消费日报

深入了解YashanDB:企业数据管理的最佳选择教程

数据库砖家

深入挖掘YashanDB数据库的插件和扩展功能

数据库砖家

AI英语口语陪练APP的开发

北京木奇科技有限公司

软件外包公司 AI英语学习 AI口语开发

OpenBMB 发布无分词器 TTS VoxCPM;儿童口语硬件 Dex 融资 480 万美元:拍摄真实物体,对话学习外语丨日报

RTE开发者社区

App 混合开发新范式:Native 与小程序碰撞下,FinClip 如何重塑移动生态?

xuyinyin

深入理解YashanDB数据库的存储引擎技术

数据库砖家

国产化浪潮中的稳妥之选:从 VMware 迁移到全栈自研云易捷超融合

智驱前线

企业级实时消息推送系统的架构设计,一文即懂!

JackJiang

网络编程 即时通讯 IM

IT运维的"全局视角":如何实现全周期精准管控?

智象科技

ITSM CMDB IT运维 一体化智能运维平台

MyEMS:重新定义人与能源的关系 —— 一场藏在数据里的能源管理革命

开源能源管理系统

开源 能源管理系统

使用YashanDB构建弹性伸缩数据库平台方法

数据库砖家

深入理解YashanDB数据库的事务处理机制

数据库砖家

乐蜂直播购物商城小程序介绍

微擎应用市场

大数据时代下的全球听风者:舆情监测与海外社媒监控技术演进

沃观Wovision

跨境贸易 社交媒体 沃观Wovision 舆情监测系统 海外舆情监测

从0到1:我们如何设计并落地一套基于AI平台的内部插件系统

袋鼠云数栈

Databend 亮相 RustChinaConf 2025,分享基于 Rust 构建商业化数仓平台的探索

Databend

舆情监测的边界拓展与海外社交监控实践

沃观Wovision

跨境贸易 出海 社交媒体 舆情监测系统 海外舆情监测

不重启、不重写、不停机:SLS 软删除如何实现真正的“无感数据急救”?

阿里巴巴云原生

阿里云 云原生 sls

ITSM - 打破部门沟通壁垒,提升问题解决效率

智象科技

ITSM CMDB 一体化运维 工单管理 工单系统

深入理解YashanDB数据库架构与性能优化

数据库砖家

深入探讨YashanDB在企业数字化转型中的应用

数据库砖家

什么是YashanDB数据库?初学者必知的基础知识

数据库砖家

使用YashanDB处理周期性数据的策略与方法

数据库砖家

使用YashanDB搭建高可用数据库集群的步骤

数据库砖家

打破能源认知盲区:MyEMS 开源系统如何重构管理范式、创造可持续价值

开源能源管理系统

开源 能源管理系统

PostgREST:来自GitHub的PostgreSQL API_GitHub_张天雷_InfoQ精选文章