REST API必须是超文本驱动的(2008)

2020-09-10 06:30:13

有那么多人将任何基于HTTP的接口称为REST API,这让我感到很沮丧。今天的示例是SocialSite REST API。这就是RPC。它尖叫着RPC。展示的联轴器太多了,应该给它打个X级。

需要做些什么才能让REST架构风格清楚地认识到超文本是一种约束呢?换句话说,如果应用程序状态的引擎(因此API)不是由超文本驱动的,那么它就不能是REST风格的,也不能是REST API。句号。有什么破损的手册需要修理吗?

REST API不应该依赖于任何单个通信协议,尽管它到给定协议的成功映射可能依赖于元数据的可用性、方法的选择等。通常,使用URI进行标识的任何协议元素都必须允许使用任何URI方案来进行标识。[这里的失败意味着身份识别与交互没有分开。]。

REST API不应该包含对通信协议的任何更改,除了填充或修复未指定的标准协议位的详细信息,例如HTTP的补丁方法或链路头字段。对于损坏的实现(比如那些愚蠢到相信HTML定义了HTTP的方法集的浏览器)的解决方案应该单独定义,或者至少在附录中定义,并期望该解决方案最终会过时。[此处的失败意味着资源接口是特定于对象的,而不是泛型的。]。

REST API应该将几乎所有的描述性工作都用于定义用于表示资源和驱动应用程序状态的媒体类型,或者定义现有标准媒体类型的扩展关系名称和/或启用超文本的标记。描述在感兴趣的URI上使用什么方法所花费的任何工作都应该完全在媒体类型的处理规则的范围内定义(在大多数情况下,已经由现有的媒体类型定义)。[此处失败意味着带外信息正在推动交互,而不是超文本。]。

Rest API不能定义固定的资源名称或层次结构(客户端和服务器的明显耦合)。服务器必须拥有控制其自己的命名空间的自由。相反,通过在媒体类型和链接关系中定义这些指令,允许服务器指示客户端如何构造适当的URI,如在HTML表单和URI模板中所做的那样。[这里的失败意味着客户端由于带外信息而采用资源结构,例如特定于域的标准,它是RPC的功能耦合的面向数据的等价物]。

REST API永远不应该有对客户端有重要意义的“类型化”资源。规范作者可以使用资源类型来描述接口背后的服务器实现,但这些类型必须与客户端无关且不可见。对于客户端来说,唯一重要的类型是当前表示的媒体类型和标准化的关系名称。[同上]。

在输入REST API时,除了初始URI(书签)和一组适合目标受众的标准化媒体类型(即,任何可能使用该API的客户端都期望能够理解)之外,不应该事先知道其他信息。从那时起,所有应用程序状态转换都必须由客户端选择服务器提供的选项来驱动,这些选项出现在接收到的表示中,或者由用户对这些表示的操作所暗示。转换可以由客户端对媒体类型和资源通信机制的知识来确定(或受其限制),这两者都可以即时改进(例如,按需编码)。[此处失败意味着带外信息正在推动交互,而不是超文本。]

我可能忘记了其他规则,但以上是与超文本约束相关的规则,这些规则在所谓的RESTAPI中最常被违反。请尝试遵循它们,或者为您的API选择其他流行语。

罗伊·菲尔丁:我被那些勇敢地试图破译罗伊的人逗乐了。虽然我真的没有什么要补充的,但以下是我拥有的…。不打算从罗伊对标签的(有效)批评中拿走任何东西,REST…。

[…]。很高兴看到Roy推出了伪/不完全的“RESTAPI”[…]。

我将增加Sam Ruby的趣味性,并尝试解释Roy Fiding最近关于是什么使API具有RESTful的一些讨论。如果你还没有读过这篇文章和所有的评论,那么我鼓励你这样做:有一些很棒的…。

[…]。而大多数计算应用介于两者之间。然而,当我向API设计人员发出信息时,我希望观众在该领域相当胜任。我必须以[…]的身份与他们交谈。

[…]。从以客户为中心的观点来看。我必须承认,在读完这篇帖子和启发它的罗伊·菲尔丁帖子后,我对REST的理解完全颠覆了。两者都是[…]。

[…]。这句话出自将休息放在地图上的人,其中一位罗伊·菲尔丁对今天人们所说的休息有点咆哮。对于任何喜欢REST架构(或[…])的人来说,这篇文章都值得一读。

[…]。Giorni fa l‘ennesimo caso di API dichiaratasi RESTful,mache invess,Detta di Roy Fiding RESTful Nonè。意义重大的La Cosa che mi spazzaèla Carenza Cronica di esempi[…]

[…]。众所周知,状态转移是由RoyT.Fiding定义的,他最近对SocialSite的REST API进行了一些改进,然后将其提供给OpenSocial规范。现在这一定很难接受,[…]。

[…]。想象一下罗伊·菲尔丁的第一站:“我对这个数字感到很沮丧[…]”,他说:“我对这个数字感到很沮丧。[font=”English“>font=”font=“type=”English“/>)。

[…]。菲尔丁最近写道:RESTAPI必须是超文本驱动的。这是一篇出色的文章,它实际上关注的是REST不是什么,并且是在[…]中编写的