1. 程式人生 > >restful levels&HATEOAS

restful levels&HATEOAS

per 自我 res 安全 con 隧道 同時 方式 動態

RESTful:

Rest是一種軟件架構風格、設計風格,而不是標準,只是提供了一組設計原則和約束條件。它主要用於客戶端和服務器交互類的軟件。基於這個風格設計的軟件可以更簡潔,更有層次,更易於實現緩存等機制。而滿足這些約束條件和原則的應用程序或設計就是 RESTful

如圖有四個層次:

技術分享圖片

level 0:The swarmp of POX(Plain old XML)

該模型的出發點是使用HTTP作為遠程交互的傳輸系統,但不使用Web的任何機制。基本上你在這裏做的是使用HTTP作為你自己的遠程交互機制的隧道機制,通常基於遠程過程調用。

技術分享圖片

特點:

  1. HTTP僅作為一個通信隧道(即HTTP只關註通信消息,而不關註客戶端及服務器間的行為)
  2. 采用遠程調用協議(Remote Procedure Call Protocol):即客戶端想要執行某一任務,或者說向服務器請求某一服務,只需發送相關消息(執行某一句柄),而不用關心底層實現。
  3. 提供一個調用接口給客戶端。

Level 1Resources

在RMM中邁向休息榮耀的第一步是引入資源。現在,我們現在開始討論各個資源,而不是將所有請求發送到單一服務端點。

技術分享圖片

特點:

  1. 通過URI來定位資源,實現資源獨立性
  2. 采用“面向對象”的通信方式

相比於Level 0,這層更加成熟的地方是客戶端需要標明“我需要什麽?”

Level 2:HTTP Verbs

我已經在0級和1級的所有交互中使用了HTTP POST動詞,但有些人使用GET代替或另外使用GET。在這些級別上它沒有太大區別,它們都被用作隧道機制,允許您通過HTTP隧道交互。2級遠離此,使用HTTP動詞盡可能接近它們在HTTP本身中的使用方式。

技術分享圖片

特點:

Level 2追加了HTTP動作來指明我們對於資源要做何種操作,如此,客戶端的請求就能完整的表述為“我需要對XX(資源)做XX(行為)”,該層級是當前使用最為廣泛地REST層級,通常定義如下四個HTTP動作:

  1. GET—-》一般性獲得資源,並不改變資源,所以這種操作相對安全
  2. POST—》通常為創建資源操作
  3. PUT—-》通常為更新資源操作
  4. DELETE-》刪除資源操作

同時,服務端不再通過錯誤消息(當然,某些系統也會封裝錯誤消息,給予客戶友善提示)來告訴客戶端執行狀態,而是通過返回HTTP狀態字來告知客戶端請求執行結果。

Level 3:Hypermedia Controls (超媒體控制)

最後一個級別引入了一些您經常聽到的在HATEOAS(超文本作為應用程序狀態引擎)的首字母縮寫詞中提到的內容。它解決了如何從列表中打開插槽到知道如何預約的問題。

特點:

首先要知道HATEOAS (Hypertext As The Engine Of Application State):這種策略解決了我們如何從得到的資源中順帶知曉下一步應當如何進行?因為要服務端的響應要封裝“下一步如何做”。

層次的意義:

  • Level 1通過使用分而治之來解決處理復雜性的問題,將大型服務端點分解為多個資源。
  • Level 2引入了一組標準動詞,以便我們以相同的方式處理類似的情況,消除不必要的變化。
  • Level 3引入了可發現性,提供了一種使協議更加自我記錄的方法。

HATEOAS

  由上面可知HATEOAS位於第三層。

  HATEOAS即超媒體應用程序狀態的引擎,是其余應用程序體系結構的一個組成部分,它區別與其他網絡應用程序體系結構。使用HATEOAS,客戶端與應用服務器的網絡應用程序提供通過超媒體動態信息。REST客戶需求沒有先驗知識如何與應用程序交互或服務器超出一般的超媒體的理解。相比之下,在CORBA客戶機和服務器交互通過固定接口共享文檔或一個接口描述語言(IDL)。

HATEOAS為RESTful Web服務帶來了相同的概念。

當請求資源的某些詳細信息時,您將提供資源詳細信息以及相關資源的詳細信息以及您可以對資源執行的可能操作。例如,在請求有關facebook用戶的信息時,REST服務可以返回以下內容

  • 用戶詳情
  • 獲取最近帖子的鏈接
  • 得到他最近評論的鏈接
  • 檢索他朋友列表的鏈接。

restful levels&HATEOAS