AICon上海|与字节、阿里、腾讯等企业共同探索Agent 时代的落地应用 了解详情
写点什么

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

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

关注

评论

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

XPath攻略:从入门到精通,元素查找不再难

霍格沃兹测试开发学社

抢开盘、抢土狗、批量抢买、卖出机器人工具使用说明

区块链技术

【京东云新品发布月刊】2024年3月产品动态

京东科技开发者

"线程池中线程异常后:销毁还是复用?"

京东科技开发者

百度智能云千帆,产业创新新引擎

百度Geek说

AI 百度智能云 千帆大模型平台

AI能代替软件工程师吗?

小魏写代码

独立站如何做好移动端的优化处理呢?

技术冰糖葫芦

API 接口

助力水下潜行:浮力调节系统仿真

DevOps和数字孪生

ChatGPT与传统搜索引擎的区别:智能对话与关键词匹配的差异

天津汇柏科技有限公司

搜索引擎; ChatGPT

大模型时代下的“金融业生物识别安全挑战”机遇

中关村科金

安全 金融 防伪 生物识别

【论文速读】| 越狱:大语言模型安全训练是如何失败的?

云起无垠

Python数据库编程全指南SQLite和MySQL实践

华为云开发者联盟

Python MySQL 开发 华为云 华为云开发者联盟

XPath攻略:从入门到精通,告别查找困难!

测试人

软件测试

京东商品列表数据接口

tbapi

京东 京东API接口 京东商品列表数据接口

网络空间测绘系统的商业应用

郑州埃文科技

网络空间测绘技术

vivo 消息中间件测试环境项目多版本实践

vivo互联网技术

RocketMQ 消息中间件 多版本环境隔离

探索华为云CCE敏捷版金融级高可用方案实践案例

华为云开发者联盟

开发 华为云 容器集群 华为云开发者联盟 华为云CCE

发掘非结构化数据价值:AI 在文档理解领域的现状与未来

Baihai IDP

程序员 AI 非结构化数据 白海科技

java线程池原理浅析

京东科技开发者

solana链土狗抢单机器人

区块链技术

展示大屏-24小时天气预报

叫练

IO模型介绍(select、poll、epoll)

京东科技开发者

大型IM工程重构实践:企业微信Android端的重构之路

JackJiang

即时通讯;IM;网络编程

火山引擎发布ByteHouse性能白皮书,揭秘OLAP性能突破的关键技术

字节跳动数据平台

数据库 大数据 云原生 数仓 企业号 3 月 PK 榜

2024南京国际自动驾驶技术展览会

AIOTE智博会

自动驾驶展 智能驾驶展

火山引擎VeDI:A/B测试开放平台正式上线,企业个性化平台一键定制

字节跳动数据平台

大数据 A/B测试 企业号 3 月 PK 榜 对比试验 数字化增长

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