天天看點

架構之:REST和HATEOAS

簡介

HATEOAS簡介

HATEOAS的格式

HATEOAS的Spring支援

總結

我們知道REST是一種架構方式,它隻是指定了六種需要遵循的基本原則,但是它指定的原則都比較寬泛,我們需要一種更加具象的限制條件來指導我們的編碼。這就是HATEOAS。

REST的英文全稱是REpresentational State Transfer,表示的是狀态的轉移。而HATEOAS的全稱是Hypertext As The Engine Of Application State,表示使用超文本作為應用程式的狀态。這樣兩者就關聯起來了。HATEOAS指定了狀态的表現形式。

超文本就是連結,在HATEOAS的規則下,所有的資源請求都是需要帶上連結的,這些連結表示可以對該資源進行的下一步操作。并且,這些連結是動态變化的,根據請求資源的不同而不同。是以,如果你的架構實作了HATEOAS風格的話,可以繼續減少client和server端的接口依賴關系。因為所有可以進行的操作都已經放在傳回資源的超連結中了。

我們舉個例子,還是請求students的例子,假如我們請求:

那麼傳回的json可能是下面這樣子的:

可以看到傳回的資訊包含student本身的資訊和相關的links資訊,裡面含有Student的school資訊。用戶端可以通過傳回的links繼續向下擷取更多的資訊。

如果我們通路另外一個student,看下傳回結果有什麼不同:

看到有什麼不同了嗎? 這次學生的age=20 ,是以擁有的選舉的權限,這次在我們的links裡面多了一個vote連結。

links會根據資源的不同發送變化,用戶端不需要知道任何伺服器端的邏輯,每個請求都包含了所有可以繼續執行的操作,進而讓用戶端和伺服器端徹底解耦。

在現實世界中,當您通路一個網站時,您會點選它的首頁。它提供了一些快照和網站其他部分的連結。您單擊它們,然後您将獲得更多資訊以及與上下文相關的更多相關連結。

類似于人與網站的互動,REST用戶端通路初始API URI并使用伺服器提供的連結動态發現可用操作并通路所需的資源。客戶不需要事先了解服務或工作流中涉及的不同步驟。此外,用戶端不再需要對各種資源的URI結構進行寫死。 HATEOAS允許伺服器在不中斷用戶端的情況下随着API的發展進行URI更改。

HATEOAS有兩個比較重要的格式,分别是RFC 5988 (web linking) 和 JSON Hypermedia API Language (HAL)。

他們稍有不同,但是原理是大同小異的。感興趣的朋友可以自行查閱。

人民需要什麼,Spring就造什麼。同樣的,對于REST+HATEOAS這種優美組合,怎麼能夠少得了Spring的身影呢?

Spring推出了Spring HATEOAS來實作這一功能。最新的版本是1.3.0,如果你使用的Spring boot,那麼使用起來将會更加的簡單,引用下面的XML就可以了:

如果是非Spring boot環境,則可以這樣引用:

在Spring HATEOAS中提供了一系列非常有用的特征來幫助我們建立Link,進而減輕我們的工作。有關Spring HATEOAS的具體内容,我們會在後面的文章中詳細講解。

如果你使用的REST架構,那麼配合上HATEOAS規則應該就是最好的組合。祝你成功。

最通俗的解讀,最深刻的幹貨,最簡潔的教程,衆多你不知道的小技巧等你來發現!