REST WebServices學習

REST WebServices學習

   圍繞面向服務的體系結構SOA(Service Oriented Architecture,SOA)的討論很多,圍繞如何正確實現SOA的討論很多。如何構建靈活的異構系統,如何集成現有的系統,如何讓異構系統進行通信?雖然當前主流的方式明顯地集中在基於SOAP、WSDL和WS-*規範的Web Services領域,但也有少數人主張更好的方式是REST,Restful WebService,或者RESTful HTTP。那什麼是REST?

RESTRepresentational State Transfer (表述性狀態轉移)的縮寫。爲什麼提這個名字?

Client application transfers state with each resource representation. This is REST.

通過超文本傳輸協議(HTTP)發送簡單的消息來實現 SOA,這基本上就是 REST 式 Web 服務 (RESTful Web services) 的工作方式。REST並不是一個協議或技術;它是一種體系結構風格

REST 是 SOAP 的輕量型替代品,它是面向資源的,而不是面向操作的。它常常被歸結爲遠程過程使用 HTTP 調用 GET、POST、PUT 和 DELETE 語句。我認爲,這只是第二個重要的步驟。 (第一個(也是最重要的)步驟是把所有資源建模爲 URL 形式。)


(*) REST比較簡單樸素,在安全性,可靠消息傳輸,或標準化的業務過程自動化上還沒有定義。(REST很適合面向數據的應用,但對於面向服務/面向方法的應用,比如需要事務、嚴密的安全性等等這些更高級的操作的應用來說,採用基於WS-*的方案顯得更有道理。)

從基本原理層次上說,REST 樣式和 SOAP 樣式 Web Service的區別取決於應用程序是面向資源的還是面向活動的。例如,在傳統的WebService中,一個獲得天氣預報的webservice會暴露一個WebMethod:string GetCityWether(string city)。而RESTful WebService暴露的不是方法,而是對象(資源),通過Http GET, PUT, POST 或者 DELETE來對請求的資源進行操作。在 REST 的定義中,一個 Web Service總是使用固定的 URI 向外部世界呈現(或者說暴露)一個資源。可以說這是一種全新的思維模式:使用唯一資源定位地址 URI,加上 HTTP 請求方法從而達到對一個發佈於互聯網資源的唯一描述和操作。

RESTful HTTP核心操作包括:

  • GET - 該操作返回已標識資源的狀態表示。您可以通過大量的上下文要素來確定狀態,例如誰正在提交請求、操作的參數(傳入的參數如HTTP 頭或者查詢字符串參數)和服務提供方維護的當前會話狀態。

  • POST - 該操作執行對已標識資源的一些特定於應用程序形式的更新。該操作行爲完全依賴於實現它的服務。由該操作返回的數據也完全依賴於應用程序。舉例來說,像 GET 操作一樣,它可以返回一個狀態表示,它還可以選擇根本不返回任何數據。

  • PUT - 該操作在已標識位置(URI)創建新資源。操作輸入必須包括一個資源的狀態表示。它完全依賴服務來創建基於這個狀態表示的資源。

  • DELETE - DELETE 操作銷燬已標識位置(URI)的資源。

REST是無狀態的,服務器無需知道當前操作的上下文,或者上一次操作的情況。這能夠提高系統的可伸縮性,是因爲它強制所有操作都是stateless的,這樣就沒有context的約束,如果要做分佈式、做集羣,就不需要考慮context的問題了。同時,它令系統可以有效地使用pool。REST對性能的另一個提升來自其對client和server任務的分配: server只負責提供resource以及操作resource的服務,而client要根據resource中的data和 representation自己做render。這就減少了服務器的開銷。

在設計 REST 式 WebService時,可以採用以下四個步驟:

  1. 決定資源及其描述性 URL。(通過url來設計系統的結構則整個系統就是由這些resource組成的,注意設計思維方式的不同)

  2. 爲每個 URL 上的通信選擇一種數據格式。

  3. 指定每個資源上的方法。

  4. 指定返回的數據和狀態碼。

具體示例點擊此處參考IBM developworks的文章。



WCF 3.5
對REST的支持

微軟提供的例子: Windows CardSpace Samples

WCF REST 快速上手: WCF REST over HTTP Service

新聞:The new WCF Web Programming Model supports REST Design

IBM孵化器項目ProjectZero:

SOA中的RESTful應用程序(1)
SOA中的RESTful應用程序(2)

以下這篇文章深入淺出的講述了什麼是REST web service, 以及和傳統Web service的區別: 《Everything about REST web services - What and How》

Part I
Part II
Part III...(Coming soon)


其他文章和資源:

A Brief Introduction to REST

How to Create a REST Protocol

Building Web Services the REST Way

InfoQ:深入淺出Rest


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章