HATEOAS(REST体系结构)的实际示例


140

正如每个人都可能注意到的那样,在野外有很多伪造的/基本的REST-API(它们实现了HTTP-API并称为REST,而没有遵循应用程序状态的超文本作为引擎的要求,这导致了向最先指定REST范例的人Roy T.

我一直找不到真正的超文本驱动的REST实现以及状态转换相关的特定于应用程序的媒体类型定义的任何实际示例。

是否有此类实施的可公开访问的示例?


3
我发现这很有趣,因为许多人认为REST是“容易的”,但是Fielding自己说,尽管这是一个简单的体系结构,但使用它设计应用程序并不简单。
aehlke

3
顺便说一句,应该是HATEOAS而不是HATEOS,后来的Google不好用。
David Roussel



Roy Fielding自己是否曾经使用HATEOAS构建过应用程序?
systemovich

Answers:


102

它不是从运行代码的角度来看的实现,但是我真的很喜欢InfoQ上的文章“ 如何喝杯咖啡 ”。它描述了以RESTful协议在星巴克订购咖啡的过程。这超出了典型的“一切都是资源” REST入门文章,并且重点介绍了HATEOAS。强烈推荐。


5
Jim Webber,
Sayas Parastatidis

2
这篇文章很好,但是不幸的是,它描述的API并不严格遵守HATEOAS原理,因为它不使用自定义媒体类型。如果所有内容都是application / xml,客户端将如何知道如何操纵(例如反序列化,解析,显示)每个资源?这将取决于传递此信息的某些非标准方式,例如本应由人类阅读的文档。
ygormutti 2015年

21

如何对Sun云API?从介绍:

该API的前提是URI空间中没有特定的结构。起点是由云服务提供商提供的URI,用于标识云本身。云的表示包含针对云中其他资源以及可能对其执行的操作(例如,部署和启动虚拟机)的URI。

背景故事或许也有帮助。


2
这是使我开始走HATEAOS道路的背景故事。
Cyber​​Fonic

3
所有链接都
消失

“对不起,kenai.com网站已关闭。”
尼克·罗兰多

@NickRolando,我替换了链接。
Rich Apodaca

@RichApodaca,背景故事链接已死。
Vasantha Ganesh K

7

Netflix具有基于HATEOAS 的REST API,该API包括链接作为资源的一部分。


1
现在状态码为
404。– naXa

1
@Will Sargent链接已损坏,请更新。
Govi S

抱歉,似乎Netflix拒绝了并采取了其他措施。
萨金特(Sargent)

2
当此类链接无效时,仅链接的答案往往不太相关。
nyedidikeke

@nyedidikeke这是一个链接,但对此上下文是一个答案,您只需要通过编辑帖子来修复链接即可!
Al-Mothafar '17

3

Roy的第4点实际上不是解决Sun Cloud API的RESTfulness问题:

REST API不得定义固定的资源名称或层次结构(客户端和服务器的明显结合)。服务器必须具有控制自己的名称空间的自由。而是允许服务器通过在媒体类型和链接关系中定义那些指令来指导客户端如何构造适当的URI(例如以HTML表单和URI模板完成)。[此处失败表示客户端由于带外信息(例如,特定于域的标准)而采用了一种资源结构,该特定于域的标准在数据方面等同于RPC的功能耦合]。

例子1:在已定义的层级中固定资源名称:

从Sun Cloud API中:“ ... VDC的表示将包括驻留在其中的群集的表示,而这些表示又包括每个群集内的VM的表示。”

示例2带外信息,例如特定于域的标准:

您必须具有Wiki页面内容(带外信息)才能知道Cloud资源字段“ uri”的“资源通信机制”是GET。


2
您是正确的,这是非常误导的。但是,Roy谈论的是uri空间中的资源名称,而不是媒体类型内容中的资源名称。Sun可以随时自由更改用于访问群集的uri。显然,如果不创建媒体类型的新版本,就不能在表示形式内将术语“集群”更改为“组”,但是可以将URI更改为任何形式。
Darrel Miller

4
我们知道Sun API使用HTTP作为其统一接口,因此客户端无需查看Wiki页面即可知道GET是云资源的有效动词。考虑到它知道GET是一个安全的动词,它可以尝试它,也可以使用OPTIONS来确定它是否可用。
Darrel Miller

3

我意识到这是前一段时间提出的,但是我举了一个简单的例子来演示“适当的” REST API流程。我尝试遵循Roy的REST规则-也许有帮助: 使用REST的API示例

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.