HATEOAS(超媒体作为应用程序状态的引擎)是REST应用程序体系结构的约束,它使RESTful样式体系结构与大多数其他网络应用程序体系结构保持独特。术语“ 超媒体 ”是指包含指向其他形式的媒体(如图像,电影和文本)的链接的任何内容。
此体系结构样式允许您在响应内容中使用超媒体链接,以便客户端可以通过遍历超媒体链接动态导航到适当的资源。这在概念上与通过单击适当的超链接来浏览网页的Web用户相同,以实现最终目标。
例如,下面给出的JSON响应可能来自API HTTP GET http://api.domain.com/management/departments/10
{
"departmentId": 10,
"departmentName": "Administration",
"locationId": 1700,
"managerId": 200,
"links": [
{
"href": "10/employees",
"rel": "employees",
"type" : "GET"
}
]
}
在前面的示例中,服务器返回的响应包含指向员工资源的超媒体链接,10/employees客户端可以遍历这些链接以读取属于该部门的员工。
上述方法的优点是从服务器返回的超媒体链接驱动应用程序的状态而不是相反。
没有普遍接受的格式来表示JSON中两个资源之间的链接。您可以选择采用上述格式,也可以选择在HTTP响应头中发送链接。
HTTP/1.1 200 OK
...
Link: <10/employees>; rel="employees"
两者都是绝对有效的解决方
HATEOAS实施
在现实世界中,当您访问网站时 - 您会访问其主页。它提供了一些快照和指向网站其他部分的链接。您单击它们,然后您将获得更多信息以及与上下文相关的更多相关链接。
类似于人与网站的交互,REST客户端访问初始API URI并使用服务器提供的链接动态发现可用操作并访问所需的资源。客户端不需要事先了解服务或工作流程中涉及的不同步骤。此外,客户端不再需要对不同资源的URI结构进行硬编码。这允许服务器在API发展时进行URI更改,而不会破坏客户端。
只能使用HATEOAS进行API交互。
每个REST框架都提供了使用框架功能创建HATEOAS链接的自己的方式,例如在此RESTEasy HATEOAS教程(链接:http://howtodoinjava.com/resteasy/writing-restful-webservices-with-hateoas-using-jax-rs-and-jaxb-in-java/)中,链接是资源模型类的一部分,它作为资源状态传输到客户端。
HATEOAS参考文献
以下是用于指定JSON REST API超媒体链接的两种流行格式:
RFC 5988(网络链接)
RFC 5988(链接:https://tools.ietf.org/html/rfc5988)提出了一个构建链接的框架,用于定义Web上资源之间的关系。RFC 5988中的每个链接都包含以下属性:
目标URI:每个链接应包含目标国际化资源标识符(IRI,链接:https://en.wikipedia.org/wiki/Internationalized_Resource_Identifier)。这由href属性表示。
链接关系类型:链接关系类型描述当前上下文(源)如何与目标资源相关。这由rel属性表示。
属性目标IRI:用于链接的属性包括hreflang,media,title,和type,和任何扩展的链路参数。
JSON超媒体API语言(HAL)
JSON HAL(https://en.wikipedia.org/wiki/Hypertext_Application_Language)是一个很有前途的提案,它设置了用JSON或XML表达超媒体控件(例如链接)的约定。目前处于起草阶段。
两个相关的MIME类型是
media type: application/hal+xml
media type: application/hal+json
HAL中的每个链接可能包含以下属性:
目标URI:表示目标资源URI。这由href属性表示。
链接关系:链接关系类型描述当前上下文与目标资源的关系。这由rel属性表示。
类型:这表示预期的资源媒体类型。这由type属性表示。
为您的应用选择超媒体链接格式没有对错。您应该选择满足大多数用例要求的格式并坚持使用。
本文暂时没有评论,来添加一个吧(●'◡'●)