歡迎光臨
每天分享高質量文章

關於Restful協議和原理最強科普

Restful是一種軟體架構風格,而不是標準,只是提供了一組設計原則和約束條件。它主要用於客戶端和服務器交互類的軟體。基於這個風格設計的軟體可以更簡潔,更有層次,更易於實現快取等機制。如果一個架構符合REST原則,就稱它為RESTful架構,可以理解為:

  1. 每一個URI代表一種資源;

  2. 客戶端和服務器之間,傳遞這種資源的某種表現層;

  3. 客戶端通過四個HTTP動詞,對服務器端資源進行操作,實現”表現層狀態轉化”。

REST(Representational State Transfer),表現層狀態轉化,指一組架構約束條件和原則。滿足這些約束條件和原則的應用程式或設計就是RESTful。

表現層(Representation): “資源”是一種信息物體,它可以有多種外在表現形式。我們把”資源”具體呈現出來的形式,叫做它的”表現層”(Representation)。

比如,文本可以用txt格式表現,也可以用HTML格式等表現。URI只代表資源的物體,不代表它的形式。它代表”資源”的位置,它的具體表現形式,是在HTTP請求的頭信息中用Accept和Content-Type欄位指定,這兩個欄位才是對”表現層”的描述。

狀態轉化(StateTransfer): 訪問一個網站,就代表了客戶端和服務器的一個互動過程。在這個過程中,勢必涉及到資料和狀態的變化。互聯網通信協議HTTP協議,是一個無狀態協議。這意味著,所有的狀態都儲存在服務器端。

因此,如果客戶端想要操作服務器,必須通過某種手段,讓服務器端發生”狀態轉化”(StateTransfer)。而這種轉化是建立在表現層之上的,所以就是”表現層狀態轉化”。

客戶端用到的手段,只能是HTTP協議。具體來說,就是HTTP協議裡面,四個表示操作方式的動詞,它們分別對應四種基本操作:

  1. GET: GET用來獲取資源

  2. POST: POST用來新建資源(也可以用於更新資源)

  3. PUT: PUT用來更新資源

  4. DELETE: DELETE用來刪除資源。

URI(Uniform Resource Identifier): 是指一個用於標識某一互聯網資源名稱的字串。該種標識允許用戶對任何(包括本地和互聯網)的資源通過特定的協議進行交互操作。URI由包括確定語法和相關協議的方案所定義。Web上可用的每種資源:HTML文件、圖像、視頻片段、程式等由一個通用資源識別符號(Uniform Resource Identifier, 簡稱”URI”)進行定位。

統一接口: REST要求,必須通過統一的接口來對資源執行各種操作。對於每個資源只能執行一組有限的操作。以HTTP/1.1協議為例,HTTP/1.1協議定義了一個操作資源的統一接口,主要包括7個HTTP方法: GET、POST、PUT、DELETE、PATCH、HEAD、OPTIONS。

  1. GET(select):從服務器取出資源(一項或多項)。

  2. POST(create):在服務器新建一個資源。

  3. PUT(update):在服務器更新資源(客戶端提供改變後的完整資源)。

  4. PATCH(update):在服務器更新資源(客戶端提供改變的屬性)。

  5. DELETE(delete):從服務器刪除資源。

  6. HEAD:獲取資源的元資料。

  7. OPTIONS:獲取信息,關於資源的哪些屬性是客戶端可以改變的。

Web應用程式最重要的REST原則是,客戶端和服務器之間的交互在請求之間是無狀態的。

按照HTTP規範定義,使用標準方法進行資源的操作,比如GET、PUT、POST和DELETE。在服務器端,應用程式狀態和功能可以分為各種資源。資源是一種概念物體,它向客戶端公開。資源的例子有: 應用程式物件、資料庫記錄、演算法等等。每個資源都使用URI得到一個唯一的地址。所有資源都共享統一的接口,以便在客戶端和服務器之間傳輸狀態。

另一個重要的REST原則是分層系統,這表示組件無法瞭解它與之交互的中間層以外的組件。通過將系統知識限制在單個層,可以限制整個系統的複雜性,促進了底層的獨立性。

當 REST 架構的約束條件作為一個整體應用時,將生成一個可以擴展到大量客戶端的應用程式。它還降低了客戶端和服務器之間的交互延遲。統一界面簡化了整個系統架構,改進了子系統之間交互的可見性。REST簡化了客戶端和服務器的實現。

1、RESTful的實現: RESTful Web 服務與 RPC 樣式的 Web 服務

RPC樣式的 Web 服務客戶端將一個裝滿資料的信封(包括方法和引數信息)通過 HTTP 發送到服務器。服務器打開信封並使用傳入引數執行指定的方法。方法的結果打包到一個信封並作為響應發回客戶端。客戶端收到響應並打開信封。

每個物件都有自己獨特的方法以及僅公開一個URI的RPC樣式Web服務,URI表示單個端點。它忽略 HTTP 的大部分特性且僅支持POST方法。

RPC風格開發關註於服務器-客戶端之間的方法呼叫,不關註基於哪個網絡層的那種協議,即RPC是面向方法的呼叫過程的。而REST是面向資源狀態的。

RESTful Web 服務是一種遵守REST式風格的Web服務,主要特點是方法信息存在於HTTP方法中,作用域存在於URI中,例如,在一個獲取設備資源串列的GET請求中,方法信息是GET,作用域信息是URI中的包含的對設備資源的過濾、分頁、排序等條件。

在 REST 樣式的 Web 服務中,每個資源都有一個地址。資源本身都是方法呼叫的標的,方法串列對所有資源都是一樣的。這些方法都是標準方法,包括HTTP GET、POST、PUT、DELETE,還可能包括HEADER和OPTIONS方法。

2、RESTful的實現:RESTful Web服務的Java框架

有兩個Java 框架可以幫助構建 RESTful Web 服務。erome Louvel和Dave Pawson開發的Restlet。

它實現針對各種 RESTful 系統的資源、表示、連接器和媒體型別之類的概念,包括 Web 服務。

在 Restlet 框架中,客戶端和服務器都是組件。組件通過連接器互相通信。該框架最重要的類是抽象類Uniform及其具體的子類 Restlet,該類的子類是專用類,比如 Application、Filter、Finder Router和Route。

這些子類能夠一起處理驗證、過濾、安全、資料轉換以及將傳入請求路由到相應資源等操作。Resource 類生成客戶端的表示形式。

 3、RESTful的實現:構建RESTful Web服務的多層架構

RESTful Web服務和動態Web應用程式在許多方面都是類似的。有時它們提供相同或非常類似的資料和函式,儘管客戶端的種類不同。與大部分動態 Web 應用程式一樣,RESTful Web 服務可以從多層架構的關註點分離中受益。業務邏輯和資料可以由自動客戶端和 GUI 客戶端共享。

惟一的不同點在於客戶端的本質和中間層的表示層。此外,從資料訪問中分離業務邏輯可實現資料庫獨立性,併為各種型別的資料儲存提供插件能力。

在瀏瀏覽器中運行且作為 RESTful Web服務消費者運行的Ajax、Flash、JavaFX、GWT、博客和wiki 等,因為它們都代表用戶以自動化樣式運行。

自動化Web服務客戶端在Web層向Resource Request Handler發送 HTTP響應。客戶端的無狀態請求在頭部包含方法信息,每個請求都包含所有必需的信息,包括 Resource Request Handler 用來處理請求的憑據。

從Web服務客戶端收到請求之後,Resource Request Handler 從業務邏輯層請求服務。

Resource Request Handler確定所有概念性的物體,系統將這些物體作為資源公開,併為每個資源分配一個惟一的URI。但是,概念性的物體在該層是不存在的。

它們存在於業務邏輯層。可以使用 Jersey 或其他框架(比如 Restlet)實現ResourceRequest Handler。

上圖中的 Web 瀏覽器客戶端作為 GUI 的前端,使用表示層中的Browser Request Handler生成的 HTML 提供顯示功能。

Browser Requester Handler可以使用MVC模型(JSF、Struts或Spring都是Java的例子)。它從瀏覽器接受請求,從業務邏輯層請求服務,生成表示並對瀏覽器做出響應,表示供用戶在瀏覽器中顯示使用。

業務規則可以集中到業務邏輯層,該層充當表示層和資料訪問層之間的資料交換的中間層。資料以域物件或值物件的形式提供給表示層。

資料訪問層提供與資料儲存層的交互,可以使用 DAO 設計樣式或者物件-關係映射解決方案(如Hibernate、OJB或iBATIS)實現。作為替代方案,業務層和資料訪問層中的組件可以實現為 EJB 組件,並取得 EJB 容器的支持,該容器可以為組件生命周期提供便利,管理持久性、事務和資源配置。

資料儲存層包括資料庫系統、LDAP 服務器、檔案系統和企業信息系統(包括遺留系統、事務處理系統和企業資源規劃系統)。

使用該架構,您可以開始看到 RESTful Web 服務的力量,它可以靈活地成為任何企業資料儲存的統一 API,從而向以用戶為中心的 Web 應用程式公開垂直資料,並自動化批量報告腳本。


推薦閱讀

關於NVMe over Fabric,NetApp EF570實現有何不同?

溫馨提示:

請搜索“ICT_Architect”“掃一掃”二維碼關註公眾號,點擊原文鏈接獲取更多電子書詳情

求知若渴, 虛心若愚

赞(0)

分享創造快樂