超媒体(HATEOAS)有什么好处?


17

对于供程序使用的API(相对于人类直接浏览您的API而言),HATEOAS的好处我不理解。当然,客户并没有绑定到URL模式,但是他们绑定了数据模式,这在我看来也是一样。

例如,假设我想查看订单上的商品,假设我已经发现或知道订单URL。

HATEOAS:

order = get(orderURL);
item = get(order.itemURL[5]);

非HATEOAS:

order = get(orderURL);
item = get(getItemURL(order,5));

在第一个模型中,我必须知道订单对象具有itemURL字段的事实。在第二个模型中,我必须知道如何构造商品URL。在这两种情况下,我都必须提前“知道”某件事,所以HATEOAS实际为我做什么?


1
get(orderURL);应该告诉你the fact that the order object has an itemURL field
扬尼斯2012年

在编写客户端应用程序时,您必须提前知道该字段是什么。
佩斯


8
如果应用程序甚至不知道订单中有商品,该如何从该应用程序中获取商品呢?发现适用于手动浏览,但不适用于自动化应用程序。
佩斯

Answers:


6

一个区别是该模式有望成为一种标准,或者至少可以被其他模式重用。

例如,假设您正在使用Twitter API,并且您也想支持StatusNet(或相反)。由于它们使用与Twitter相同的数据模型,因此,如果API遵循HATEOAS,您现在只需更改主URL。如果没有,那么您现在必须更改代码中的每个URL

当然,如果您需要更改代码以放置服务的入口点URL,那么它似乎没有太大帮助。真正让人眼前一亮的是,是否动态插入了该URL。例如,如果您要构建像Twillio这样的服务,它将与用户自己的API交互。


我没考虑过这是一个有趣的观点。
佩斯

@YannisRizos:嗯,我看不到我说HATEOAS是标准的地方。我说过“(数据)模式希望是一个标准”。在REST术语中,这就是媒体类型。
安德烈Paramés

二读时,您绝对正确。
扬尼斯

2
是的,如果您假设链接的相关名称相同。但是总的来说,不仅在您提到的特定示例上,世界上的每个程序员都不一定会为相同或等同的动作选择相同的名称。这种好处来自程序员同意通用接口命名和参数的情况。
derloopkat 2015年

8
  1. 可探索的API:听起来很琐碎,但不要低估可探索API的功能。浏览数据的能力使客户端开发人员可以更轻松地构建API及其数据结构的思维模型。

  2. 内联文档:使用URL作为链接关系可以将客户端开发人员指向文档。

  3. 简单的客户端逻辑:仅遵循URL而不是自己构造URL的客户端应该更易于实现和维护。

  4. 服务器拥有URL结构的所有权:超媒体的使用消除了客户端对服务器使用的URL结构的硬编码知识。

  5. 将内容卸载到其他服务:将内容卸载到其他服务器(例如CDN)时,超媒体是必需的。

  6. 带有链接的版本控制:Hypermedia帮助API的版本控制。

  7. 相同服务的多种实现:当存在同一服务的多种实现(并且一个客户端需要访问其中多个客户端)时,超媒体是必需的。

您可以在此处找到这些要点的深入说明:http : //soabits.blogspot.no/2013/12/selling-benefits-of-hypermedia.html


>将内容卸载到其他服务:将内容卸载到其他服务器(例如CDN)时,超媒体是必需的。不,这不对。您可以保持相同的链接并使用CDN。
布鲁诺·科斯塔
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.