何為REST?
REST是英文Representational State Transfer的縮寫(xiě),中文翻譯為“表述性狀態(tài)轉移”。
Rest是設計基于命名資源而非消息的松耦合應用程序,例如:以 Uniform Resource Locators(URL)、Uniform Resource Identifiers(URI)和 Uniform Resource Names(URN)的形式 — 而非消息的松耦合 Web 應用程序的一種風(fēng)格。
REST巧妙地借助已經(jīng)驗證過(guò)的成功的Web基礎設施 — HTTP。Web上所有的東西(頁(yè)面、圖像等)本質(zhì)上都是資源。而 REST 正是基于命名資源而非消息的,這就限制了底層技術(shù)的曝光,從而給應用程序設計中的松耦合提供了便利條件。REST 的魅力在于任何東西都可以成為資源,且表示方法也可以不同。
REST優(yōu)勢
REST改善了用戶(hù)接口跨多個(gè)平臺的可移植性,并且通過(guò)簡(jiǎn)化服務(wù)器組件,改善了系統的可伸縮性。最為關(guān)鍵的是通過(guò)分離用戶(hù)接口和數據存儲這兩個(gè)關(guān)注點(diǎn),使得不同用戶(hù)終端享受相同數據成為了可能。
無(wú)狀態(tài)性
無(wú)狀態(tài)性是在客戶(hù)-服務(wù)器約束的基礎上添加的又一層規范。他要求通信必須在本質(zhì)上是無(wú)狀態(tài)的,即從客戶(hù)到服務(wù)器的每個(gè)request都必須包含理解該request所必須的所有信息。這個(gè)規范改善了系統的可見(jiàn)性(無(wú)狀態(tài)性使得客戶(hù)端和服務(wù)器端不必保存對方的詳細信息,服務(wù)器只需要處理當前request,而不必了解所有的request歷史),可靠性(無(wú)狀態(tài)性減少了服務(wù)器從局部錯誤中恢復的任務(wù)量),可伸縮性(無(wú)狀態(tài)性使得服務(wù)器端可以很容易的釋放資源,因為服務(wù)器端不必在多個(gè)request中保存狀態(tài))。同時(shí),這種規范的缺點(diǎn)也是顯而易見(jiàn)得,由于不能將狀態(tài)數據保存在服務(wù)器上的共享上下文中,因此增加了在一系列request中發(fā)送重復數據的開(kāi)銷(xiāo),嚴重的降低了效率。
緩存
為了改善無(wú)狀態(tài)性帶來(lái)的網(wǎng)絡(luò )的低效性,我們填加了緩存約束。緩存約束允許隱式或顯式地標記一個(gè)response中的數據,這樣就賦予了客戶(hù)端緩存response數據的功能,這樣就可以為以后的request共用緩存的數據,部分或全部的消除一部分交互,增加了網(wǎng)絡(luò )的效率。但是用于客戶(hù)端緩存了信息,也就同時(shí)增加了客戶(hù)端與服務(wù)器數據不一致的可能,從而降低了可靠性。
B/S架構的優(yōu)點(diǎn)是其部署非常方便,但在用戶(hù)體驗方面卻不是很理想。為了改善這種情況,我們引入了REST. REST在原有的架構上增加了三個(gè)新規范:統一接口,分層系統和按需代碼。
REST規范接口
每個(gè)資源都有對應的URI,不同的HTTP Method對應的對資源不同的操作,GET(讀取資源信息)、POST(添加資源)、PUT(更新資源信息)、DELETE(刪除資源)。幾乎所有的計算機語(yǔ)言都可以通過(guò)HTTP協(xié)議同REST服務(wù)器通信。
REST應用
目前國內外流行的Web 2.0應用API接口中,很多都支持REST架構風(fēng)格。例如:新浪微博開(kāi)放平臺、人人網(wǎng)API、Google OpenID、Flickr、Twitter、eBay、Facebook、Last.fm、del.icio.us、Yahoo Search、Amazon S3、Amazon EC2、Digg、Microsoft Bing、FriendFeed、PayPal、Foursquare,更多...
聯(lián)系客服