简介
咱们晓得 REST 是一种架构形式,它只是指定了六种须要遵循的根本准则,然而它指定的准则都比拟宽泛,咱们须要一种更加具象的约束条件来领导咱们的编码。这就是 HATEOAS。
HATEOAS 简介
REST 的英文全称是 REpresentational State Transfer,示意的是状态的转移。而 HATEOAS 的全称是 Hypertext As The Engine Of Application State,示意应用超文本作为应用程序的状态。这样两者就关联起来了。HATEOAS 指定了状态的表现形式。
超文本就是链接,在 HATEOAS 的规定下,所有的资源申请都是须要带上链接的,这些链接示意能够对该资源进行的下一步操作。并且,这些链接是动态变化的,依据申请资源的不同而不同。所以,如果你的架构实现了 HATEOAS 格调的话,能够持续缩小 client 和 server 端的接口依赖关系。因为所有能够进行的操作都曾经放在返回资源的超链接中了。
咱们举个例子,还是申请 students 的例子,如果咱们申请:
GET /students/zhangsan HTTP/1.1
Host: api.rest.com
Accept: application/json
那么返回的 json 可能是上面这样子的:
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: ...
{
"student": {
"student_id": 11111,
"age": 10,
"links": {"school": "/student/11111/school"}
}
}
能够看到返回的信息蕴含 student 自身的信息和相干的 links 信息,外面含有 Student 的 school 信息。客户端能够通过返回的 links 持续向下获取更多的信息。
如果咱们拜访另外一个 student,看下返回后果有什么不同:
GET /students/lisi HTTP/1.1
Host: api.rest.com
Accept: application/json
那么返回的 json 可能是上面这样子的:
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: ...
{
"student": {
"student_id": 2222,
"age": 20,
"links": {
"school": "/student/2222/school",
"vote": "/student/2222/vote",
}
}
}
看到有什么不同了吗?这次学生的 age=20,所以领有的选举的权限,这次在咱们的 links 外面多了一个 vote 链接。
links 会依据资源的不同发送变动,客户端不须要晓得任何服务器端的逻辑,每个申请都蕴含了所有能够继续执行的操作,从而让客户端和服务器端彻底解耦。
在事实世界中,当您拜访一个网站时,您会点击它的主页。它提供了一些快照和网站其余局部的链接。您单击它们,而后您将取得更多信息以及与上下文相干的更多相干链接。
相似于人与网站的交互,REST 客户端拜访初始 API URI 并应用服务器提供的链接动静发现可用操作并拜访所需的资源。客户不须要当时理解服务或工作流中波及的不同步骤。此外,客户端不再须要对各种资源的 URI 构造进行硬编码。HATEOAS 容许服务器在不中断客户端的状况下随着 API 的倒退进行 URI 更改。
HATEOAS 的格局
HATEOAS 有两个比拟重要的格局,别离是 RFC 5988 (web linking) 和 JSON Hypermedia API Language (HAL)。
他们稍有不同,然而原理是大同小异的。感兴趣的敌人能够自行查阅。
HATEOAS 的 Spring 反对
人民须要什么,Spring 就造什么。同样的,对于 REST+HATEOAS 这种柔美组合,怎么可能少得了 Spring 的身影呢?
Spring 推出了 Spring HATEOAS 来实现这一性能。最新的版本是 1.3.0,如果你应用的 Spring boot,那么应用起来将会更加的简略,援用上面的 XML 就能够了:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-hateoas</artifactId>
<version>2.5.1</version>
</dependency>
如果是非 Spring boot 环境,则能够这样援用:
<dependency>
<groupId>org.springframework.hateoas</groupId>
<artifactId>spring-hateoas</artifactId>
<version>1.3.1</version>
</dependency>
在 Spring HATEOAS 中提供了一系列十分有用的特色来帮忙咱们创立 Link,从而加重咱们的工作。无关 Spring HATEOAS 的具体内容,咱们会在前面的文章中具体解说。
总结
如果你应用的 REST 架构,那么配合上 HATEOAS 规定应该就是最好的组合。祝你成功。
本文已收录于 http://www.flydean.com/03-rest-hateoas/
最艰深的解读,最粗浅的干货,最简洁的教程,泛滥你不晓得的小技巧等你来发现!