写点什么

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

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

关注

评论

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

Amazon EKS 上有状态服务启用存储加密

亚马逊云科技 (Amazon Web Services)

亚马逊云科技

专访高雪峰:从GPT3.5到4,超强推理能力的实现与“图”密不可分 | 36氪专访

Fabarta

人工智能 AI 图计算 图智能

NFTScan:05.08~05.14 NFT 市场热点汇总

NFT Research

NFT

Django笔记二十九之中间件介绍

Hunter熊

Python django 中间件 middleware

MySQL的varchar存储原理:InnoDB记录存储结构

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 5 月 PK 榜

一周狂赚50万,GPT-4帮你在线“脱单”,AI女友按分钟收费,男友高达数量1000+

加入高科技仿生人

人工智能 AI 低代码 ChatGPT GPT-4

NUMA架构介绍及优缺点分析

天翼云开发者社区

架构设计 NUMA

AI低代码,或将再次颠覆开发行业

引迈信息

低代码 AIGC JNPF AI低代码

Last Week in Milvus

Zilliz

非结构化数据 Milvus Zilliz 向量数据库

对不起,您的访问次数已用尽!

为自己带盐

.net core 限流 AspNetCoreRateLimit

飞桨EasyDL月刊:4月功能全新升级,模型训练步骤缩短63%

飞桨PaddlePaddle

飞桨 EasyDL

YMatrix 5.0 故障自动转移功能新实现,运维更方便!

YMatrix 超融合数据库

数据库 时序数据库 超融合数据库 YMatrix

共铸国云 智领未来 | 化云为雨 泽被万物

天翼云开发者社区

云计算 网络

局域网内使用的多人协同编辑文档的软件哪个好?对比5款主流平台

爱吃小舅的鱼

Confluence PingCode 文档管理工具

如何简单快捷的使用上ChatGPT?

Ricky

人工智能 openai ChatGPT

声网自研编码器 a264 & a265:更优画质更低能耗,进一步适配实时互动场景需求

声网

Footprint Analytics 与 Oasys 建立合作关系, 用数据帮助项目方提升游戏开发体验

Footprint Analytics

区块链 Footprint Analytics

山东移动:全业务域核心系统升级,实现大幅降本增效

OceanBase 数据库

数据库 oceanbase

20 分钟搭建互动教室,实现多人实时互动白板协作丨RTE 开发实战课 • 第三期

声网

明道云开放日上海站开启报名

明道云

浅谈TCP、UDP、ICMP三种常见协议

天翼云开发者社区

网络传输协议

远程桌面连接可以传文件么?

RayLink远程工具

远程桌面连接

MobTech MobPush|助力预热618

MobTech袤博科技

低代码开发平台 重塑数字医疗生产力

力软低代码开发平台

VictoriaMetrics常见性能问题排查

天翼云开发者社区

vm 架构设计

Footprint Analytics、Oasys L2 区块链和 HOME Verse 联手推动区块链游戏基础设施创新

Footprint Analytics

龙蜥产品生态总监做客 InfoQ:后 CentOS 时代,国产操作系统能否扛起大旗?

OpenAnolis小助手

centos InfoQ 迁移 国产操作系统 龙蜥社区

Nautilus Chain 或成未来最好的链上隐私生态

股市老人

IPv6 无状态地址如何自动配置?

天翼云开发者社区

IP 网络

4 月 NFT 月报: 在动荡的 NFT 市场中寻求生存

Footprint Analytics

区块链游戏 NFT 链游

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