惠州熱門的網(wǎng)站線上推廣渠道
RESTful簡介
本節(jié)將從基礎(chǔ)的概念開始介紹什么是RESTful、RESTful的特點、RESTful中的資源、HTTP Method、HTTP Status,還將介紹RESTful和SOAP到底有哪些區(qū)別。
1.什么是RESTful
RESTful是目前流行的互聯(lián)網(wǎng)軟件服務(wù)架構(gòu)設(shè)計風(fēng)格。REST(Representational State Transfer,表述性狀態(tài)轉(zhuǎn)移)一詞是由Roy Thomas Fielding在2000年的博士論文中提出的,它定義了互聯(lián)網(wǎng)軟件服務(wù)的架構(gòu)原則,如果一個架構(gòu)符合REST原則,則稱之為RESTful架構(gòu)。
REST并不是一個標(biāo)準(zhǔn),它更像一組客戶端和服務(wù)端交互時的架構(gòu)理念和設(shè)計原則,基于這種架構(gòu)理念和設(shè)計原則的Web API更加簡潔,更有層次。
1.1 RESTful的特點
1)每一個URI代表一種資源。
2)客戶端使用GET、POST、PUT、DELETE四種表示操作方式的動詞對服務(wù)端資源進(jìn)行操作:GET用于獲取資源,POST用于新建資源(也可以用于更新資源),PUT用于更新資源,DELETE用于刪除資源。
3)通過操作資源的表現(xiàn)形式來實現(xiàn)服務(wù)端請求操作。
4)資源的表現(xiàn)形式是JSON或者HTML。
5)客戶端與服務(wù)端之間的交互在請求之間是無狀態(tài)的,從客戶端到服務(wù)端的每個請求都包含必需的信息。
符合RESTful規(guī)范的Web API需要具備如下兩個關(guān)鍵特性:
- 安全性:安全的方法被期望不會產(chǎn)生任何副作用。當(dāng)我們使用GET操作獲取資源時,不會引起資源本身發(fā)生改變,也不會引起服務(wù)器狀態(tài)的改變。
- 冪等性:冪等的方法保證了重復(fù)進(jìn)行一個請求和一次請求的效果相同(并不是指返回客戶端的響應(yīng)總是相同的,而是指服務(wù)器上資源的狀態(tài)從第一次請求后就不再改變)。在數(shù)學(xué)中,冪等性是指N次變換和一次變換的結(jié)果相同。
1.2 REST的產(chǎn)生背景
隨著互聯(lián)網(wǎng)的發(fā)展,前端頁面與后端的數(shù)據(jù)交互越來越頻繁,數(shù)據(jù)結(jié)構(gòu)越來越復(fù)雜,REST的出現(xiàn)極大地簡化了前后端數(shù)據(jù)的交互邏輯。如果我們把前端頁面看作一種用于展示的客戶端,那么API就是為客戶端提供數(shù)據(jù)、操作數(shù)據(jù)的接口。這種設(shè)計可以獲得極高的擴展性。
假設(shè),原本大家通過PC上的網(wǎng)上商城購物,當(dāng)需要擴展到手機等移動端時,只需要開發(fā)針對iOS和Android的兩個客戶端,通過客戶端訪問系統(tǒng)公共的Web API就可以完成通過瀏覽器頁面提供的功能,而后端代碼基本無須改動,如圖所示。
RESTful風(fēng)格的Web API支持我們使用統(tǒng)一的接口規(guī)范對接iOS、Android、HTML5和PC等客戶端。正是由于REST有著眾多優(yōu)點,因此REST一經(jīng)提出就迅速取代了復(fù)雜而笨重的SOAP,成為Web API的標(biāo)準(zhǔn)。
2.HTTP Method
什么是HTTP Method(HTTP方法)呢?
HTTP提供了POST、GET、PUT、DELETE等操作類型對某個Web資源進(jìn)行Create、Read、Update和Delete操作。一個HTTP請求除了利用URI標(biāo)志目標(biāo)資源之外,還需要通過HTTP Method指定針對該資源的操作類型。下表介紹一些常見的HTTP方法及其在RESTful風(fēng)格下的使用。
總結(jié)了主要的HTTP方法與資源URI結(jié)合使用的建議返回值。常見的HTTP Method(HTTP方法)有POST、GET、PUT、PATCH和DELETE,它們分別對應(yīng)Create、Read、Update和Delete(或者CURD)操作。當(dāng)然,還有許多其他方法,比如OPTIONS和HEAD等,但使用頻率較低。
3.HTTP狀態(tài)碼
HTTP狀態(tài)碼就是服務(wù)向用戶返回的狀態(tài)碼和提示信息,客戶端的每一次請求,服務(wù)都必須給出回應(yīng),回應(yīng)包括HTTP狀態(tài)碼和數(shù)據(jù)兩部分。
HTTP定義了40個標(biāo)準(zhǔn)狀態(tài)碼,可用于傳達(dá)客戶端請求的結(jié)果。狀態(tài)碼分為以下5個類別:
- 1xx:信息,通信傳輸協(xié)議級信息。
- 2xx:成功,表示客戶端的請求已成功接受。
- 3xx:重定向,表示客戶端必須執(zhí)行一些其他操作才能完成其請求。
- 4xx:客戶端錯誤,此類錯誤狀態(tài)代碼指向客戶端。
- 5xx:服務(wù)器錯誤,服務(wù)器負(fù)責(zé)這些錯誤狀態(tài)代碼。
RESTful API中使用HTTP狀態(tài)碼來表示請求執(zhí)行結(jié)果的狀態(tài),適用于REST API設(shè)計的代碼以及對應(yīng)的HTTP方法,如表所示。
HTTP協(xié)議提供的狀態(tài)碼和HTTP Method。通過RESTful API返回給客戶端的狀態(tài)碼和提示信息可以判斷出Web API的請求和執(zhí)行情況。
除了以上基本的HTTP請求狀態(tài)碼外,Web API服務(wù)端還需要定義業(yè)務(wù)相關(guān)的狀態(tài),如1000訂單提交成功、1002訂單修改成功等。每種狀態(tài)碼都有標(biāo)準(zhǔn)的解釋,客戶端只需查看狀態(tài)碼字典就知道相應(yīng)業(yè)務(wù)的執(zhí)行結(jié)果,所以服務(wù)端應(yīng)該返回盡可能精確的狀態(tài)碼。
4.REST與SOAP的區(qū)別
隨著互聯(lián)網(wǎng)的發(fā)展,RESTful越來越流行,那么RESTful和SOAP到底有哪些區(qū)別?我們在設(shè)計Web服務(wù)時,到底是應(yīng)該選擇目前最流行的RESTful還是選擇老牌的WebService呢?
SOAP(Simple Object Access Protocol,簡單對象訪問協(xié)議)是一種標(biāo)準(zhǔn)化的通信規(guī)范,主要用于Web服務(wù)。它有著嚴(yán)格的規(guī)范和標(biāo)準(zhǔn),包括安全、事務(wù)等各個方面的內(nèi)容,同時SOAP強調(diào)操作方法和操作對象的分離,使用WSDL文件規(guī)范和XSD文件分別對其定義。
RESTful簡化了WebService的設(shè)計,它不再需要WSDL,而是通過最簡單的HTTP協(xié)議傳輸數(shù)據(jù)(包括XML或JSON)。既簡化了設(shè)計,也減少了網(wǎng)絡(luò)傳輸量(因為只傳輸代表數(shù)據(jù)的XML或JSON,沒有額外的XML包裝)。
REST強制所有的操作都必須是無狀態(tài)的,沒有上下文的約束,不需要考慮上下文和會話保持的問題,極大地提高系統(tǒng)的可伸縮性。RESTful相對于SOAP更加簡單明了,它并沒有一個明確的架構(gòu)標(biāo)準(zhǔn),更像是一種設(shè)計風(fēng)格,其核心是面向資源;而WebService基于SOAP協(xié)議,主要核心是面向活動。