NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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

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

关注

评论

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

架构实战 8 - 消息队列MySql表格设计

架构实战营 「架构实战营」

使用OpenAI接口释放ChatGPT API 的力量

devpoint

React nextjs ChatGPT

Kubernetes容器状态探测的艺术

俞凡

Kubernetes 云原生

fcpx专业多媒体剪辑软件:Final Cut Pro X中文激活版

真大的脸盆

Mac 视频剪辑 视频处理 视频剪辑处理

One-YOLOv5 v1.2.0发布:支持分类、检测、实例分割

OneFlow

人工智能 深度学习

【分布式技术专题】「分布式技术架构」一文带你厘清分布式事务协议及分布式一致性协议的算法原理和核心流程机制(上篇)

洛神灬殇

分布式 2PC 3PC 原理分析 分布式协议

大型供应链物流企业的数字化转型方法论

明道云

DAPP马蹄链智能合约系统开发(开发方案及详细)

系统开发咨询1357O98O718

将老人拉出无声的世界,AI是怎么做的?

脑极体

AI医疗

EasyRcovery16免费电脑照片数据恢复软件

茶色酒

EasyRcovery16

这份Java面试八股文让329人成功进入大厂,堪称2023最强

Java你猿哥

Java 面经 春招 八股文 Java八股文

Guitar Pro8吉他学习辅助软件

茶色酒

Guitar Pro8

量化合约系统开发(规则开发)丨量化合约开发(源码说明)

系统开发咨询1357O98O718

DAPP/LP单双币(子母币)流动性质押挖矿分红系统开发(开发说明及源码)

系统开发咨询1357O98O718

分享主流的10个流程管理软件

PingCode

流程管理 流程管理软件

PyTorch深度学习实战 | PyTorch环境搭建

TiAmo

PyTorch

Spinner(列表选项框)的基本使用

智趣匠

android spinner galley

架构训练营-模块9秒杀系统

张Dave

三天吃透RabbitMQ面试八股文

程序员大彬

Java RabbitMQ 消息队列

dapp/lp代币合约流动性质押挖矿分红系统开发详细及案例(源码部署)

系统开发咨询1357O98O718

DAPP智能合约链游开发源码案例丨DAPP智能合约链游系统开发(逻辑及方案)

系统开发咨询1357O98O718

YOLOv5全面解析教程⑥:模型训练流程详解

OneFlow

人工智能 深度学习

号外号外!简单几步就能把Pinterest视频下载到手机里啦!

frank

Pinterest

Matlab常用图像处理命令108例(二)

timerring

图像处理

一天吃透Git面试八股文

程序员大彬

git 面试

28岁小公司程序员,无车无房不敢结婚,要不要转行?

程序员晚枫

程序员 收入

Spring Boot:如何配置Undertow容器?不会我教你 | 超级详细

Java你猿哥

spring Spring Boot 后端 ssm java

Kotlin 学习笔记(一)

修之竹

android kotlin

CorelDRAW2023最新版本平面矢量绘图排版软件

茶色酒

CorelDraw2023

LeSS敏捷框架高效生产力实践

俞凡

敏捷开发 大厂实践

深度解析首个Layer3 链 Nautilus Chain,有何优势?

鳄鱼视界

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