写点什么

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:486096
用户头像

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

关注

评论

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

如何在小程序中完成支付进件

Towify

微信小程序 编辑器 无代码

前端程序员培训学习需要学多久?

小谷哥

“2022混合云TOP50”重磅发布 天翼云问鼎榜首

Geek_2d6073

如何通过 NFTScan 发掘 NFT 项目的内在价值

NFT Research

区块链 NFT

游戏引擎中的实时渲染和在V-Ray中渲染有什么区别?

3DCAT实时渲染

渲染引擎 游戏引擎 渲染服务 游戏开发引擎

Vue-Router 路由与配置

千锋IT教育

火山引擎DataTester科普:A/B实验常见名词解释

字节跳动数据平台

大数据 AB testing实战 12 月 PK 榜

学习大数据培训和自学哪个比较好

小谷哥

HIFIVE音加加提供曲库、评分、修音功能的K歌SDK-Android版本

数到3变暖男i

API 社交泛娱乐 娱乐社交 K歌 K歌SDK

OSCS开源安全周报第22期:NuGet 仓库中被发现 13.5 万个包含钓鱼地址的组件包

墨菲安全

为什么是无代码?

间隔

微信小程序 编辑器 无代码

西藏等保测评公司有哪些?共有几家?

行云管家

等保测评 等保测评公司 西藏

部分双机热备软件详细介绍-行云管家

行云管家

高可用 双机热备 双机

前端编程学习有没有必要参加?

小谷哥

YonBuilder移动开发平台 AVM框架 封装省市区级联选择弹框

YonBuilder低代码开发平台

开发者 AVM

阿里二面被问MySQL的事务隔离级别,结果回去等通知了

程序员小毕

MySQL 数据库 程序员 面试 后端

大数据开发技术培训班怎么选

小谷哥

行业认可|墨菲安全登信息通信软件供应链安全社区优秀榜单

墨菲安全

Python 的安装与配置(图文教程)

千锋IT教育

只要是做乙方,欧美白人下班后也别想失联?

SAP虾客

IT行业 乙方 工作与生活分开 欧美 TICKET

如何用 7 分钟玩转函数计算?

阿里巴巴云原生

阿里云 Serverless 云原生

GitHub标星已达26K+,鹅厂技术总监手写分布式架构体系笔记

小小怪下士

Java 程序员 分布式

一文带你了解EiPaaS和EiPaaS的国际趋势

华为云开发者联盟

云计算 后端 华为云 12 月 PK 榜

一文读懂于Zebec生态中的潜在收益方式

鳄鱼视界

TDengine与中泰证券正式签约,打造金融量化交易场景解决方案

TDengine

数据库 tdengine 时序数据库

基于 Caddy 部署盘古 Admin 实现流量网关

码农大熊

盘古开发框架

MegEngine Windows Python wheel 包减肥之路

MegEngineBot

深度学习 开源 MegEngine

建筑、工程和施工产业中的3D可视化

3DCAT实时渲染

可视化 云渲染 实时云渲染 云渲染平台

参加java培训对学习程序员有用吗?

小谷哥

【电路设计】避开元器件的这些“坑”,多年的心梗都治好了!

华秋PCB

工具 PCB PCB设计

皮皮App发起爱心捐赠,让城市里的荧荧之光,给乡村孩子带去一片暖冬

联营汇聚

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