什麼是統一介面?
答:REST與另外兩種分散式應用架構風格DO(分散式物件)、RPC(遠端過程呼叫)的主要區別,在於它要求必須以統一的介面來對資源執行各種操作。這個統一介面正是由HTTP 1.1協議(RFC2616)來定義的,這也正是設計HTTP 1.1協議的主要目的。由HTTP 1.1協議定義的統一介面包括了以下的內容: a. 用來與資源互動的6個標準的HTTP方法:GET/POST/PUT/DELETE/HEAD/OPTIONS(在RFC2616中還定義了其他幾個方法,但是這幾個方法不是用來與資源互動的)。最常用的是前面的GET/POST/PUT/DELETE這4個方法。 b. 一些標準的HTTP頭資訊欄位(HTTP header fields)。頭資訊欄位在HTTP訊息中以名稱-值對的形式出現,分為通用頭資訊(general header fields)、請求頭資訊(request header fields)、響應頭資訊(response header fields)、實體頭資訊(entity header fields)4種類別,用來完整表達HTTP訊息的操作語義,或者對訊息的安全性、快取等方面加以控制。詳情請看RFC2616。 c. 一些標準的HTTP響應狀態程式碼(status codes)。其中100-199代表臨時性的響應,僅僅用在與客戶端-伺服器端握手協商的階段;200-299代表請求成功完成;300-399代表請求應該重定向;400-499代表因客戶端錯誤導致的請求無法完成;500-599代表因伺服器端錯誤導致的請求無法完成。詳情請看RFC2616。 d. 一套通用的訪問身份認證框架(general framework for access authentication)。推薦的兩種可選的身份認證機制HTTP Basic Authentication和HTTP Digest Authentication,定義在RFC2617(HTTP Authentication: Basic and Digest Access Authentication)中。 e. 在客戶端-伺服器端之間用來確定資源表述格式的標準的內容協商(content negotiation)機制。 f. 對於HTTP響應訊息體(message body)的標準的快取機制,包括了兩種快取模型:過期模型(expiration model)和驗證模型(validation model)。
對於以上所述的統一介面內容,需要補充以下一些注意事項: a. 對於一個特定的資源,客戶端應用可以執行的操作是有限的。讓一個資源(一個URI)承擔過多的職責,這是一種錯誤的設計。不必擔心定義更多的資源(更多的URI)有什麼問題,這對Web應用的可伸縮性來說只有好處沒有壞處。 b. 按照HTTP 1.1協議的規定:GET方法是安全的且冪等的,PUT/DELETE方法是不安全的但是冪等的,而POST方法是既不安全也不冪等的。嚴格遵守HTTP協議的這個規定,是非常重要的。“人有多大膽、地有多大產”的做法(例如:使用GET請求對資源執行所有操作)只會帶來災難性的後果。 c. 將GET/POST/PUT/DELETE這4種方法對映為針對資源的CRUD操作,只是一種最為常見的設計模式(因為Ruby on Rails而流行開來),這種設計模式並不是REST或者HTTP 1.1協議強制要求的。 d. 統一介面的要求不僅僅適用於HTTP通訊鏈條兩端的user agent和origin server,還普遍適用於通訊鏈條中的所有中間元件(intermediary components)。某個中間元件與其直接相鄰元件之間的互動,也必須使用相同的統一介面。 e. 按照REST的要求,應該儘量確保操作語義對於HTTP通訊鏈條上中間元件的可見性,因此操作的語義必須由HTTP頭資訊來完全表達。 f. 除了HTTP 1.1協議中定義的這些標準的頭資訊欄位外,在必要的時候,應用也可以使用自定義的頭資訊欄位。不過,當與防火牆打交道時,需要確保防火牆不至於因無法理解這些自定義的頭資訊欄位,而禁止其所屬的HTTP訊息的收發。 g. 除了HTTP 1.1協議中定義的這些標準的響應狀態程式碼外,在必要的時候,應用也可以使用自定義的響應狀態程式碼,以代表某些自定義的出錯狀態。 h. HTTP 1.1協議在安全性方面的設計相當靈活。它定義了一套基於質詢-響應(challenge-response)過程的通用的訪問身份認證框架,而不是強制應用使用某種特定的身份認證機制。除了推薦的兩種身份認證機制Basic和Digest外,應用系統可以很靈活地插入自定義的認證機制(例如:插入基於LDAP的認證機制)。只要仍然遵循HTTP 1.1協議定義的這個通用的訪問身份認證框架,就不會破壞REST所要求的統一介面和操作語義對於中間元件的可見性。 i. 統一介面保證了操作語義對於中間元件的可見性,正因為如此,才有可能對HTTP訊息進行高效的快取。快取是改善網路呼叫讀操作效能的關鍵,HTTP 1.1協議為實現快取提供了非常完善的機制。快取可以在HTTP通訊鏈條的很多地方實現,例如user agent、http proxy、reverse proxy server、origin server等等。
相關文章
- 什麼是介面?為什麼使用介面? 什麼時候使用介面?(轉)
- 什麼是SATA介面
- 什麼是API介面,具體是什麼意思?API
- 什麼是介面,如何理解
- 什麼是介面測試?
- 【學習】介面是什麼?實現原理的是什麼?
- java中lock介面是什麼Java
- lineout是什麼介面
- 什麼是介面?如何定義介面?如何實現介面?
- ? python 介面自動化 (一)-- 什麼是介面、介面優勢、型別 (詳解)Python型別
- Java 介面和抽象類是什麼,有什麼區別Java抽象
- 介面測試是什麼?如何做好介面測試?
- 介面測試關注點是什麼?
- 什麼是Java Marker Interface(標記介面)Java
- 代理IP中的API介面是什麼?API
- 什麼是物理層介面?—Vecloud微雲Cloud
- 什麼是API資料介面該怎麼使用?API
- 作業系統是什麼?Linux是什麼作業系統?作業系統Linux
- API介面是什麼?產品經理怎麼去看API介面文件?API
- ? python 介面自動化 (二)--什麼是介面測試、為什麼要做介面測試 (詳解)Python
- 什麼是CRM系統
- 什麼是WMS系統?
- 什麼是CRM系統?
- Lightning是什麼?蘋果Lightning介面有什麼功能?蘋果
- 一什麼是函式?函式
- 系統呼叫與庫函式是什麼,區別是什麼函式
- 什麼是分散式系統分散式
- 什麼是中臺系統?
- 什麼是系統思考家?
- 什麼是域名系統(DNS)?DNS
- ERP系統是什麼
- ERP系統是什麼?能起到什麼作用?
- 什麼是主鏈系統?主鏈系統有什麼作用?
- 【董天一】什麼是IPFS?(一)
- 什麼是API介面?API介面的用途以及詳細示例說明。API
- 什麼是cookie,什麼是sessionCookieSession
- 什麼是DNS,什麼是HostsDNS
- 什麼是模式? 什麼是框架?模式框架