什麼是REST?

REST
表象化狀態轉變(英文:Representational State Transfer,簡稱REST)是Roy Fielding博士在2000年他的博士論文中提出來的一種軟件架構風格。

目前在三種主流的Web服務實現方案中,因爲REST模式的Web服務與複雜的SOAP和XML-RPC對比來講明顯的更加簡潔,越來越多的web服務開始採用REST風格設計和實現。例如,Amazon.com提供接近REST風格的Web服務進行圖書查找;雅虎提供的Web服務也是REST風格的。

宗旨
REST 從資源的角度來觀察整個網絡,分佈在各處的資源由URI確定,而客戶端的應用通過URI來獲取資源的表形。獲得這些表形致使這些應用程序轉變了其狀態。隨着不斷獲取資源的表形,客戶端應用不斷地在轉變着其狀態,所謂表形化的狀態轉變(Representational State Transfer)。

這一觀點不是憑空臆造的,而是通過觀察當前Web互聯網的運作方式而抽象出來的。Roy Fielding 認爲,

“ 設計良好的網絡應用表現爲一系列的網頁,這些網頁可以看作的虛擬的狀態機,用戶選擇這些鏈接導致下一網頁傳輸到用戶端展現給使用的人,而這正代表了狀態的轉變。 ”


要點及標準
需要注意的是,REST是一種設計風格而不是一個標準。REST通常基於使用HTTP,URI,和XML以及HTML這些現有的廣泛流行的協議和標準。

資源是由URI來指定。
對資源的操作包括獲取、創建、修改和刪除資源,這些操作正好對應HTTP協議提供的GET、POST、PUT和DELETE方法。
通過操作資源的表形來操作資源。
資源的表現形式則是XML或者HTML,取決於讀者是機器還是人,是消費web服務的客戶軟件還是web瀏覽器。當然也可以是任何其他的格式。

REST的要求
客戶端和服務器結構
連接協議具有無狀態性
能夠利用Cache機制增進性能
層次化的系統
Code On Demand - Javascript

關於狀態
應該注意區別應用的狀態和連接協議的狀態。REST對於連接的無狀態性實際上要求每次經過無狀態的連接協議傳送的信息必須包含應用中所有的狀態信息。


實現舉例
例如,一個簡單的網絡商店應用,

列舉所有商品,

GET http://www.store.com/products
具體某一件商品,

GET http://www.store.com/product/12345
下單購買,

POST http://www.store.com/order,
<purchase-order>
  <item> ... </item>
</purchase-order>


REST的優點
可以利用緩存Cache來提高響應速度
通訊本身的無狀態性可以讓不同的服務器的處理一系列請求中的不同請求,提高服務器的擴展性
瀏覽器即可作爲客戶端,簡化軟件需求
相對與其他疊加在HTTP協議之上的機制,REST的軟件依賴性更小
不需要額外的資源發現機制
在軟件技術演進中的長期的兼容性更好

目前許多公司提供服務的企業都用到REST模式,比如支付寶的支付接口、DISCUZ NT 3.0的API、淘寶的TOP(Taobao Open Platform)等等

互聯網的下一個發展方向,在WEB這一塊,我個人認爲將是SOA的天下,REST也是SOA中的一種,微軟目前的WCF也是SOA中的一種實現方式。

可以想象得出,未來的WEB應用,都會以API的方式去提供服務,不管是給自己本系統的不同模塊之間還是與外部應用,都會採用SOA的方式,這肯定是一種趨勢。

在目前的應用中,都需要考慮海量數據和大併發,那麼所開發的應用都應該要能支持分佈式,而SOA則是一個即可以使模塊與模塊之間獨立,也可以使得應用和應用之間的耦合性降低,同時還先天性支持了分佈式的實現模式。

這種變革將會像B/S變革C/S一樣,一定會在未來的某一天,徹底改變。
發佈了0 篇原創文章 · 獲贊 0 · 訪問量 2406
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章