AICon 上海站|90%日程已就绪,解锁Al未来! 了解详情
写点什么

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

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

关注

评论

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

【数据库实验】,java语言零基础自学

Java 程序员 后端

一文带你了解Java并发中的锁优化,让你的代码运行效率翻倍

Java 程序员 后端

一文看透Java高并发:Synchronized锁的性质、原理及其缺陷

Java 程序员 后端

一篇文带你入门SSM框架Spring开发!精彩干货不间断!

Java 程序员 后端

【网络信息安全】身份认证,hadoop环境搭建教程

Java 程序员 后端

一口气面试6家大厂,已拿5家offer,大厂没有你想象中的难

Java 程序员 后端

一场哔哩哔哩Java开发面试之旅,分享面试经历及复习资料

Java 程序员 后端

万字长文,字节大牛百万调优经验之作:JVM调优实战笔记

Java 程序员 后端

【线程】(1),java高级特性编程及实战pdf百度云

Java 程序员 后端

【被面试官吊打】从系统角度考虑性能优化,kafkajvm调优

Java 程序员 后端

一款SQL自动检查神器,再也不用担心SQL出错了,自动补全

Java 程序员 后端

【数据结构与算法 10】算法的时间复杂度和空间复杂度

Java 程序员 后端

一招搞定 Spring Boot 可视化监控!,java进阶教程云盘

Java 程序员 后端

一文带你深扒ClassLoader内核,揭开它的神秘面纱

Java 程序员 后端

一文彻底弄懂如何选择抽象类还是接口,linux基础入门知识

Java 程序员 后端

【源码分析设计模式 7】Integer中的享元模式

Java 程序员 后端

一份秀出新天际的SpringCloudAlibaba笔记,把微服务玩的出神入化

Java 程序员 后端

一次完整的JVM NativeMemoryTracking 堆外内存泄露分析

Java 程序员 后端

【白话设计模式】去哪儿网一面,java面试题刷题软件

Java 程序员 后端

一篇文章丢给你,让你一文了解JVM,2021Java最新大厂面试真题总结

Java 程序员 后端

一篇文章带你快速理解JVM运行时数据区 、程序计数器详解 (手画详图(1)

Java 程序员 后端

一篇送给临近35岁程序员的文章,mysql数据库sql语句面试题

Java 程序员 后端

一文掌握大数据架构师需要具备的能力和格局,别再说你不会JVM性能监控和调优了

Java 程序员 后端

一篇文章让你了解基于Spring的测试,java自学百度网盘

Java 程序员 后端

【线程】,Java自学宝典pdf

Java 程序员 后端

【计算机网络 1】计算机网络概述,Java高级工程师进阶学习—Java热修复原理

Java 程序员 后端

一夜之间火爆GitHub的好文!!阿里资深架构师整理分享

Java 程序员 后端

一年Java开发经验,阿里巴巴五面(已offer,java原理视频

Java 程序员 后端

一文读懂 spring MVC 请求处理流程,Java开发新手入门教程

Java 程序员 后端

一篇文章带你快速理解JVM运行时数据区 、程序计数器详解 (手画详图

Java 程序员 后端

一行Java代码实现两玩家交换装备【并发编程】

Java 程序员 后端

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