简介

咱们晓得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.1Host: api.rest.comAccept: application/json

那么返回的json可能是上面这样子的:

HTTP/1.1 200 OKContent-Type: application/jsonContent-Length: ...{    "student": {        "student_id": 11111,        "age": 10,        "links": {            "school": "/student/11111/school"        }    }}

能够看到返回的信息蕴含student自身的信息和相干的links信息,外面含有Student的school信息。客户端能够通过返回的links持续向下获取更多的信息。

如果咱们拜访另外一个student,看下返回后果有什么不同:

GET /students/lisi HTTP/1.1Host: api.rest.comAccept: application/json

那么返回的json可能是上面这样子的:

HTTP/1.1 200 OKContent-Type: application/jsonContent-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/

最艰深的解读,最粗浅的干货,最简洁的教程,泛滥你不晓得的小技巧等你来发现!