写点什么

请不要再管它们叫 REST API 了

  • 2019-12-20
  • 本文字数:988 字

    阅读完需:约 3 分钟

请不要再管它们叫REST API了

2000 年初,Douglas Crockford 宣称 JavaScript 是世界上被误解得最深的一门编程语言。造成误解的主要原因是糟糕的命名方式、设计上的错误和不严格的标准,等等。所以说,导致这种误解是很自然的。


去年,我在推特上发了一条有关 REST 架构范式的推文。



大多数人认为基于 URL 和 HTTP 动词设计的 API 就是 REST API,但这样的想法实际上错得离谱。


这个误解存在了很长一段时间。与 JavaScript 不一样的是,REST 指南已经说得很清楚了,REST 这个名词强调了状态转换(State Transfer),但大多数所谓的 REST API 设计者却忽略了这一点。


如果你问一下身边的程序员他们设计的 API 是否支持 HATEOAS,他们十有八九会瞪大了眼睛看着你,然后说:你到底在说什么?


然而,REST 的名字本身就说明了一切。它并没有说要使用哪一种协议,也没有说使用哪一种方式来标识资源,它只说到表示性状态转移(REpresentational State Transfer)。Roy Fielding 博士说,状态转移管理是 REST API 的一个必要条件。


真正的 REST API 应该为客户端提供状态以及在状态之间进行切换的方式。它提供了资源的表示(不一定是 JSON 格式)和指向相关资源的链接(超链接),这些链接可以让应用程序从一个状态切换到另一个状态。如下例所示:


{  "id": 463219,  "firstName": "John",  "lastName": "Smith",  "company": "Acme Inc.",  "salary": 72500,  "links": [    {      "href": "https://api.myapp.com/employees/employee/463219",      "rel": "self"    },    {      "href": "https://api.myapp.com/companies/company/375",      "rel": "company"    },    {      "href": "https://api.myapp.com/payments/employee/463219",      "rel": "payments"    }    ]}
复制代码


这个例子提供了资源的描述和其他相关资源的信息。


需要特别提到的是,是否使用 HTTP 协议并不重要。REST 的关键之处在于让服务器端来负责客户端的状态转移。客户端的状态几乎是由服务器端来驱动的,所以,讨论 API 版本管理并没有多大意义。客户端只要知道 REST API 的入口点就可以了,剩下的根据服务器端的响应来做决定,但这一点却被大多数人忽略了。


只是简单地将 CRUD 操作映射到 HTTP 动词的 API 与应用程序状态转移丝毫扯不上关系,你可以把它们叫作 Web API 或 HTTP API,但请不要把它们叫作 REST API。

延展阅读

我们为什么从 REST 转向 gRPC

英文原文

Please, Don’t Call Them RESTful


2019-12-20 17:443421
用户头像
小智 让所有人认同的文字称不上表达

发布了 408 篇内容, 共 392.4 次阅读, 收获喜欢 1983 次。

关注

评论

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

兴业银行携手用友,为企业打造新一代财资管理服务

用友BIP

银行 司库

成功举行|装备强国 数智驱动,走进泰开集团暨2023装备制造企业数智化创新论坛

用友BIP

制造

顺丰基于 Flink CDC + Hudi 推进实时业务落地

Apache Flink

大数据 flink 实时计算

敏捷产品经理企业培训内容要点

顿顿顿

Scrum 敏捷 Scrum Master 敏捷开发管理工具

模块八 消息队列mysql存储表结构设计

家有两宝

#架构训练营

用友BIP助力企业升级数智化底座,实现数智转型

用友BIP

国产替代

“数智化供应链“赋能有色企业原料供应链管理优化

用友BIP

冶金

华为云ModelArts:开启智能化时代的机器学习平台 | 社区征文

法医

华为云ModelArts 年中技术盘点

代码实训教学支持「分组作业」,学生协作分工一起学|ModelWhale 版本更新

ModelWhale

人工智能 云计算 数据分析 在线编程 云课堂

【MySQL技术专题】「问题实战系列」深入探索和分析MySQL数据库的数据备份和恢复实战开发指南(数据恢复补充篇)

洛神灬殇

MySQL 数据库 Binlog 数据库备份和恢复

数智时代下的低代码开发平台:Docker容器解锁创新潜能

EquatorCoco

Docker 低代码 数智时代

数字先锋|少跑多办!天翼云助力安徽政务跑出便民利企“加速度”

天翼云开发者社区

云计算 云平台

Spring 容器介绍

EquatorCoco

spring spring ioc

浅说TCP状态机制

天翼云开发者社区

TCP 数据传输

叮!你有一份夏日福利待签收

KaiwuDB

时序数据库 大促 KaiwuDB

覆盖全球4亿+用户的大型企业如何构建财务共享中心?

用友BIP

财务共享

represented by IPQ9554+IPQ6010 chip-difference between Wi-Fi 6 and Wi-Fi 7

wifi6-yiyi

wifi6 WiFi7

软件测试 / 测试开发丨 Linux 三剑客与管道使用

测试人

Python 程序员 软件测试 装饰器

单线程 Redis 如此快的 4 个原因

越长大越悲伤

redis redis为什么如此快

如何使用 NFTScan SDK 工具构建 NFT Explorer Dapp

NFT Research

NFT\ SDK 教程

OpenMLDB 发布线上到线下数据自动同步工具

第四范式开发者社区

人工智能 机器学习 数据库 开源 特征

Linux中ARP学习和老化机制

天翼云开发者社区

Linux ARP

高性能存储 SIG 月度动态:DSMS 完成 Anolis 23 预览版发布,欢迎体验和反馈

OpenAnolis小助手

高性能存储 龙蜥社区 sig Anolis 23 DSMS

【7.14-7.21】写作社区优秀技术博文一览

InfoQ写作社区官方

热门活动 优质创作周报

如何成为网络安全大牛(黑客)?

网络安全学海

黑客 网络安全 信息安全 计算机 渗透测试

打造工业互联网平台,强化“腰部”支撑,助力实现国产替代

用友BIP

国产替代

分布式系统中的数据复制

互联网工科生

分布式 数据 系统

快对讲| 融合视频会议

anyRTC开发者

音视频 快对讲 融合会议 视频监控 电话入会

什么是供应链(Supply chain)?

优秀

#供应链 供应链管理

请不要再管它们叫REST API了_架构_Andrea Chiarelli_InfoQ精选文章