2010年12月5日 星期日
REST 閱讀心得 #1 歷史與限制
維基百科上面整理的資料都頗為精簡,
有一篇文章跟目前研究有很大的關係,
閱讀一下把心得與重點列在底下.
參考資料: Representational State Transfer - Wikipedia, the free encyclopedia
1. 歷史
REST架構在HTTP 1.0之上, 與HTTP 1.1同時間發展出來, 強調4個Web建構元件間的互動關係 (origin servers, gateways, proxies and clients), 需多Web系統都強調符合REST的設計架構.
2. 概念
REST-stlye架構主要包含clients與servers角色, clients送(提)出對servers的要求, 而servers處理這要求並給予適當的回應, 要求與回應建構在"轉移資源的表述"上(the transfer of representations of resources).
資源(resource)可以是任何可被定址到(be addressed)有條理且有意義的概念(any coherent and meaningful concept), 而資源的表述(A representation of a resource)是一個文件描述了這資源目前的狀態(a document that captures the current or intended state of a resource).
2.1 HTTP 例子
HTTP有大量的詞彙描述了: verbs (or methods), URIS, Media types, request, response codes等等. REST引用了現有HTTP協定中的特性, 從而允許已存在的proxy與gateway元件可以增加額外的功能如: HTTP caching與安全加強的功能.
SOAP RPC contrast
SOAP RPC over HTTP, 讓應用程式的設計者可以定義任意的新名詞與新動作(如: getUsers(), savePurchaseOrder(...)), 這些動作建構在 HTTP 'POST' 動詞之上. 這樣的動作略過現有HTTP的能力(如: 認證, caching, 與內容型態的驗證), 讓應用程式的設計者可以重新定義與開發新的功能. 比如一些額外的功能如: getNewUsersSince(Date date), savePurchaseOrder(string customerLogon, string password, ...).
3. 限制 (Constraints)
符合 REST 架構風格有六個限制, 這些是限制在架構上, 關於系統的個別元件實作可自由設計, 但架構上要符合這六個限制:
(1) Client–server
Client透過一個一致的介面與Server分離, 如此client code的可攜帶性(portability)可以提昇. 而Server較不需要考慮使用者介面或使用者狀態, Server設計可以較為簡單且也較具可延展性(scalable), 在介面一致時, Server與Client可分開獨立設計, 也可容易更換成其他實作.
(2) Stateless
client-server的通訊更近一步限制"無"任何的client狀態在請求間被儲存在server上, 每個client對server的請求包含了"所有"服務這請求所需的資訊, 所有狀態相關的資料被保持在client上. server可以是有狀態的, 但這限制需要server-side的狀態可以被一個URL所描述, 有如一個資源一般. 如此限制不僅讓server更容易被監控管理, 也讓server在網路有狀況段現實較為穩定可靠, 也可以增強Server的可延展性.
(3) Cacheable
類似WWW, client可以將server的回應快取起來(cache), 回應(Responses)必須暗示或明示的定義可被快取且要預想clients可能會重用過期或不正確的回應資料作為未來要求的依據. 良好的快取管理策略可以部分或完全的節省client-server間的通訊的次數, 可改善系統的延展性與效能.
(4) Layered System
client無法判斷其是否直接連到server (有可能中間經過proxy之類), 這些中間經過的server可以增加系統的延展性與透過快取讓系統負載平衡, 甚至可以強迫實行某一些安全策略.
(5) Code on demand (optional)
server可暫時延伸或自訂功能把一些運算邏輯轉移到client執行, 可透過如Java applets與client-side script如JavaScript的技術來實現.
(6) Uniform interface
client與server間單一介面可簡化與分離(decouple)兩者間的架構, 讓另一邊均可以獨立發展. 有四個有關介面設計的詳細指導原則會在底下說明.
以上六個有關REST的架構限制唯一有一個是可選擇性的: code on demand. 假如一個違反其餘的限制, 就不可完全歸類為RESTful的服務.
只要遵循以上的限制, 就符合REST架構風格, 也就可以有分散式超媒體系統(distributed hypermedia system)一些突出的特質如: performance, scalability, simplicity, modifiability, visibility, portability and reliability.
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言