RESTful:

Rest是一種軟件架構(gòu)風(fēng)格、設(shè)計(jì)風(fēng)格,而不是標(biāo)準(zhǔn),只是提供了一組設(shè)計(jì)原則和約束條件。它主要用于客戶端和服務(wù)器交互類的軟件。基于這個(gè)風(fēng)格設(shè)計(jì)的軟件可以更簡潔,更有層次,更易于實(shí)現(xiàn)緩存等機(jī)制。而滿足這些約束條件和原則的應(yīng)用程序或設(shè)計(jì)就是 RESTful。
如圖有四個(gè)層次:

 

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

該模型的出發(fā)點(diǎn)是使用HTTP作為遠(yuǎn)程交互的傳輸系統(tǒng),但不使用Web的任何機(jī)制。基本上你在這里做的是使用HTTP作為你自己的遠(yuǎn)程交互機(jī)制的隧道機(jī)制,通常基于遠(yuǎn)程過程調(diào)用

特點(diǎn):
  1. HTTP僅作為一個(gè)通信隧道(即HTTP只關(guān)注通信消息,而不關(guān)注客戶端及服務(wù)器間的行為)

  2. 采用遠(yuǎn)程調(diào)用協(xié)議(Remote Procedure Call Protocol):即客戶端想要執(zhí)行某一任務(wù),或者說向服務(wù)器請求某一服務(wù),只需發(fā)送相關(guān)消息(執(zhí)行某一句柄),而不用關(guān)心底層實(shí)現(xiàn)。

  3. 提供一個(gè)調(diào)用接口給客戶端。

 

Level 1:Resources  

在RMM中邁向休息榮耀的第一步是引入資源。現(xiàn)在,我們現(xiàn)在開始討論各個(gè)資源,而不是將所有請求發(fā)送到單一服務(wù)端點(diǎn)。

特點(diǎn):
  1. 通過URI來定位資源,實(shí)現(xiàn)資源獨(dú)立性

  2. 采用“面向?qū)ο蟆钡耐ㄐ欧绞?/p>

相比于Level 0,這層更加成熟的地方是客戶端需要標(biāo)明“我需要什么?”
 
 

Level 2:HTTP Verbs 

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

 
特點(diǎn):

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

  1. GET—-》一般性獲得資源,并不改變資源,所以這種操作相對安全

  2. POST—》通常為創(chuàng)建資源操作

  3. PUT—-》通常為更新資源操作

  4. DELETE-》刪除資源操作

同時(shí),服務(wù)端不再通過錯(cuò)誤消息(當(dāng)然,某些系統(tǒng)也會(huì)封裝錯(cuò)誤消息,給予客戶友善提示)來告訴客戶端執(zhí)行狀態(tài),而是通過返回HTTP狀態(tài)字來告知客戶端請求執(zhí)行結(jié)果。

 

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

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

特點(diǎn):
首先要知道HATEOAS (Hypertext As The Engine Of Application State):這種策略解決了我們?nèi)绾螐牡玫降馁Y源中順帶知曉下一步應(yīng)當(dāng)如何進(jìn)行?因?yàn)橐?wù)端的響應(yīng)要封裝“下一步如何做”。
 

層次的意義:

  • Level 1通過使用分而治之來解決處理復(fù)雜性的問題,將大型服務(wù)端點(diǎn)分解為多個(gè)資源。
  • Level 2引入了一組標(biāo)準(zhǔn)動(dòng)詞,以便我們以相同的方式處理類似的情況,消除不必要的變化。
  • Level 3引入了可發(fā)現(xiàn)性,提供了一種使協(xié)議更加自我記錄的方法。

 

HATEOAS

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

  HATEOAS即超媒體應(yīng)用程序狀態(tài)的引擎,是其余應(yīng)用程序體系結(jié)構(gòu)的一個(gè)組成部分,它區(qū)別與其他網(wǎng)絡(luò)應(yīng)用程序體系結(jié)構(gòu)。使用HATEOAS,客戶端與應(yīng)用服務(wù)器的網(wǎng)絡(luò)應(yīng)用程序提供通過超媒體動(dòng)態(tài)信息。REST客戶需求沒有先驗(yàn)知識(shí)如何與應(yīng)用程序交互或服務(wù)器超出一般的超媒體的理解。相比之下,在CORBA客戶機(jī)和服務(wù)器交互通過固定接口共享文檔或一個(gè)接口描述語言(IDL)。

HATEOAS為RESTful Web服務(wù)帶來了相同的概念。

當(dāng)請求資源的某些詳細(xì)信息時(shí),您將提供資源詳細(xì)信息以及相關(guān)資源的詳細(xì)信息以及您可以對資源執(zhí)行的可能操作。例如,在請求有關(guān)facebook用戶的信息時(shí),REST服務(wù)可以返回以下內(nèi)容

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