速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

请不要再管它们叫 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:443406
用户头像
小智 让所有人认同的文字称不上表达

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

关注

评论

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

win版Scan2CAD (图片转CAD工具)v10.4.20直装激活版

iMac小白

Scan2CAD下载 Scan2CAD直装版 Scan2CAD激活版

什么是DNS缓存投毒攻击,有什么防护措施

德迅云安全杨德俊

win版HyperSnap(截图工具) v9.5.1 特别版

iMac小白

HyperSnap下载 HyperSnap激活版 HyperSnap

win版LizardSystems Find MAC Address(MAC地址查询器) v24.05 特别版

iMac小白

LLM实战:当网页爬虫集成gpt3.5

不在线第一只蜗牛

GPT LLM

赛前辅导 | 职场<火焰杯>测试开发大赛赛前辅导-Web自动化测试

测试人

软件测试

百度文库行业首发「智能画本」功能,跨模态AI内容创作行业领先

Geek_2d6073

企业如何做好 SQL 质量管理?

爱可生开源社区

sql SQL审核 SQLE SQL质量

一文了解npm install -g和npm install --save-dev的关系

华为云开发者联盟

JavaScript 前端 华为云 华为云开发者联盟 企业号2024年5月PK榜

win版TurboCollage(照片拼贴工具)多版本合集 v7.3.2 特别版

iMac小白

TurboCollage下载

win版OfficeSuite Premium(办公套件)简体中文版

iMac小白

NFTScan 正式上线 Mint NFTScan 浏览器和 NFT API 数据服务

NFT Research

NFT NFTScan API 文档

Introducing the DR5018M: Advanced, Cost-EffectiveIPQ5018Wireless Solutions

wallyslilly

ipq5018

快速了解什么是MES系统

万界星空科技

工业互联网 制造业 生产管理系统 mes 万界星空科技

EIP-3074:革新以太坊授权方式的里程碑

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 公链开发

win版Any Video Downloader Pro(视频下载工具)v8.8.17 特别版

iMac小白

MySQL 社区经理:MySQL 8.4 InnoDB 参数默认值为什么要这么改?

爱可生开源社区

MySQL 新特性 MySQL 8.4

万界星空科技QMS系统如何管理车间产品的质量

万界星空科技

质量管理 万界星空科技 QMS 生产质量

开发者选型:小程序原生还是小程序框架?

Geek_2305a8

现代前端工程化实践:Git、Husky、Commitlint与PNPM的协同作战

秃头小帅oi

YashanDB与慧点科技完成兼容互认证

Geek_2d6073

win版Native Instruments Maschine(音频制作工具) v2.18.1 (x64)特别版

iMac小白

从融媒到智媒,小程序都有哪些综合内容生态创新的框架?

Geek_2305a8

一键自动化博客发布工具,用过的人都说好(头条篇)

程序那些事

工具 程序那些事 自动发布

京东面试:如何进行JVM调优?

王磊

Java

win版iSpring Suite (PowerPoint转Flash工具) v11.7.0 Build 5 (x64)激活版下载

iMac小白

Flink 任务调度策略:Eager 模式详解

木南曌

flink 实时计算

Java中CAS算法的集中体现:Atomic原子类库,你了解吗?

EquatorCoco

Java 算法 开发语言

win版Glary Utilities Pro(系统优化工具) v6.10.0.14 中文激活版

iMac小白

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