1. 程式人生 > >Restful levels層級 和HATEOAS原則

Restful levels層級 和HATEOAS原則

關系 分開 個人 新媒體 har 網絡應用 soap str 成熟

Restful levels:

要知道API的哪個級別,Richardson引入了一個名為Richardson Maturity Model的模型。正如名稱本身所暗示的,它講述了REST API的成熟度級別。

根據Richardson成熟度模型,任何REST API都屬於從0級到3級的任何成熟度級別,如下所述。

技術分享圖片

開發的每個REST API都不必高達3級。但是這個模型可以幫助REST API的開發人員知道他們的API屬於哪個級別,以及如何通過在上面的模型層次結構中向上移動來改善他們的API 。

0級:POX的沼澤

  1. 在此級別設計的API根本不是Rest API,而是基於SOAP的Web服務發生的地方。
  2. 在此級別,沒有基於資源的URI, 超媒體的概念,也沒有正確使用HTTP協議 (這是REST API的關鍵特性)。實際上,屬於此級別的API不會充分利用或利用HTTP協議的全部潛力。HTTP僅被視為傳輸層協議或僅僅是客戶端和服務器之間的隧道機制。

第1級:基於資源的地址/ URI

  1. 這是REST API的起始級別。在這個層面上,概念的資源基礎地址被 引入,它告訴你應該有個人的URI服務器上的每個資源(不像LEVEL 0,我們有一個單一的URI從客戶端的每個傳入的請求)。
  2. 這就像減少了從單個端點(處理所有操作的LEVEL 0端點)到多個基於資源的URI(如Divide and Conquer算法)的負擔。
  3. 示例:創建發送到URI1的推文請求,刪除推文請求轉到URI2等。因此,無論我們是創建新推文,刪除推文,還是更新推文,操作信息(創建,更新,刪除推文)仍然是在請求正文中。在上面的twitter API中,我們可以將TWEET,COMMENT和FOLLOWER視為上述應用程序中的不同資源。
  4. 如果我們只是設計了基於資源的URI 而沒有其他任何東西,那麽我們處於成熟度模型的第1級。在這種情況下,HTTP僅用作客戶端和服務器之間的隧道,我們沒有利用HTTP作為應用程序層協議的潛力。
  5. 大多數REST初學者都是在這個LEVEL上設計REST API:

技術分享圖片

第2級:利用HTTP的潛力作為應用層協議

  1. 在此級別下開發的REST充分利用了HTTP作為應用程序層協議的全部潛力。
  2. 在此LEVEL開發的REST API使用標準HTTP方法/謂詞和不同的HTTP狀態代碼對資源URI執行不同的操作。因此,請求機構將不再提供此級別的操作信息。因此,這個API比在LEVEL 0和LEVEL 1開發的API要成熟得多。

第3級:使用超媒體或HATEOAS

  1. 在第1級中, 引入了基於資源的URI概念,在第2節中,我們利用HTTP方法充分利用了HTTP協議。LEVEL 3使用Hypermedia (也稱為HATEOAS -Hypermedia作為REST世界中的應用程序狀態引擎),它驅動API客戶端的交互。通常,API客戶端不知道所有資源端點,並且REST不會處理API文檔(它可以告訴API客戶端有關所有端點的信息),這與我們擁有WSDL的SOAP不同,後者向API客戶端提供有關服務的信息。
  2. 使用概念HATEOAS使不同的基於資源的端點知道API客戶端,即發送一些超媒體作為端點響應的響應,其反過來充當應用程序狀態的引擎,因此名稱為HATEOAS。REST API中的HATEOAS概念使API自我記錄,因此不需要API文檔。
  3. 在這個LEVEL 3開發的API通常被認為是完全RESTful API,這是我們看到REST API的魅力所在。

HATEOAS:

超媒體作為應用程序狀態引擎HATEOAS)是REST應用程序體系結構的一個組件,它將其與其他網絡應用程序體系結構區分開來。

使用HATEOAS,客戶端與網絡應用程序交互,其應用程序服務器通過超媒體動態提供信息。除了對超媒體的一般理解之外,REST客戶端幾乎不需要知道如何與應用程序或服務器交互。

相比之下,CORBA中的客戶端和服務器通過文檔或接口描述語言(IDL)共享的固定接口進行交互。

HATEOAS約束將客戶端和服務器分離的方式使服務器功能能夠獨立發展。

示例:

REST客戶端通過簡單的固定URL進入REST應用程序。客戶端可能采取的所有未來操作都在服務器返回的資源表示中發現。用於這些表示的媒體類型以及它們可能包含的鏈接關系是標準化的。客戶端通過從表示中的鏈接中進行選擇或通過以其媒體類型提供的其他方式操縱表示來轉換應用程序狀態。通過這種方式,RESTful交互由超媒體驅動,而不是帶外信息。[1]

例如,[2]此GET請求獲取帳戶資源,以XML表示形式請求詳細信息:

技術分享圖片

回應是:

技術分享圖片

回復包含以下可能的後續鏈接:進行存款,取款或轉賬,或關閉賬戶。

稍後檢索帳戶信息時,帳戶會透支:

技術分享圖片

現在只有一個鏈接可用:存入更多錢。在當前狀態下,其他鏈接不可用。因此,術語引擎應用狀態。可能的操作因資源狀態的不同而有所不同。

客戶端不需要了解服務器提供的每種媒體類型和通信機制。通過服務器提供給客戶端的“ 按需代碼 ”,可以在運行時獲取理解新媒體類型的能力。

參考:

https://en.wikipedia.org/wiki/HATEOAS

https://developers.redhat.com/blog/2017/09/13/know-how-restful-your-api-is-an-overview-of-the-richardson-maturity-model/

Restful levels層級 和HATEOAS原則