非HATEOAS示例

时间:2016-03-12 10:45:38

标签: rest hateoas

我一直在研究REST,特别是维基百科上的HATEOAS,并且声明

  

原则是客户端完全通过应用服务器动态提供的超媒体与网络应用程序进行交互

如果不是通过超媒体,客户端如何与应用程序进行交互?

非HATEOAS互动的一些代码示例是什么?

2 个答案:

答案 0 :(得分:2)

非HATEOAS API需要事先了解它们之间的资源和关系。

例如,如果考虑一个库API,一本书'资源可以将其作者的名称或ID作为属性。要获得有关作者的更多信息,API客户端必须以某种方式知道“作者”#39;资源具有特定的上下文路径,并且它的ID是属性值。如果客户想要借用那本特定的书,事情会变得更加复杂。要做到这一点,必须知道必须执行POST请求才能创建具有某些属性的某些特定资源(如书的ID)。必须在客户端实现中硬编码如何执行此类操作的知识。在HATEOAS的每本书中都有#39;将链接到所有相关资源,它还包含与该书相关的操作的信息。

PayPal客户争议API可以作为真实世界的示例非HATEOAS API。检查'list disputes' part:它提供了具有各种属性的资源列表。然后看the 'provide evidence' part。它说客户可能提供与争议相关的资源。仅通过遵循API中的资源中的链接来解决它是不可能的。如果它是HATEOAS那么在争议中应该有某种类型的链接'可以传达添加“证据”的可能性的资源。对每一个争议。作为一名程序员,您必须阅读文档才能知道“争议”。可以有证据'加入。

我真的推荐this video作为关于HATEOAS是什么以及如何表达资源之间关系的优秀学习资料。

答案 1 :(得分:1)

您缺少的重要部分是

  

REST客户端不需要有关如何与任何交互的先验知识   超出一般理解的特定应用程序或服务器   超媒体

我们的想法是,在不知道API提供哪些资源或如何与它们进行交互的情况下,客户端可以使用HATEOAS动态发现您的API以及如何与它们进行交互。

例如:

{
    "_links": {
        "self": { "href": "/orders" },
        "next": { "href": "/orders?page=2" }
    }
}

self我可以推断出我目前位于/orders /和next/orders?page=2可以使用下一组资源。

除此之外,它还根据给定资源告诉我基于该资源状态可以使用哪些操作

即。在这种情况下,应该有第二页订单,否则next将不是一个选项。 (它会在回复中)

查看Hal Browser,它允许您在不事先了解API的情况下动态导航API。