1. 程式人生 > >REST和RESTFUL的相關概念理解

REST和RESTFUL的相關概念理解

1.REST和RESTFUL是什麼
   REST ( REpresentational State Transfer ),State Transfer 為 "狀態傳輸" 或 "狀態轉移 ",Representational 中文有人翻譯為"表徵"、"具象",合起來就是 "表徵狀態傳輸" 或 "具象狀態傳輸" 或 "表述性狀態轉移"
   REST是一種架構風格,REST 指的是一組架構約束條件和原則。滿足這些約束條件和原則的應用程式或設計就是 RESTful。其核心是面向資源,REST專門針對網路應用設計和開發方式,以降低開發的複雜性,提高系統的可伸縮性。
   REST提出設計概念和準則為:
   1.網路上的所有事物都可以被抽象為資源(resource)
   2.每一個資源都有唯一的資源標識(resource identifier),對資源的操作不會改變這些標識
   3.所有的操作都是無狀態的
   REST簡化開發,其架構遵循CRUD原則,該原則告訴我們對於資源(包括網路資源)只需要四種行為:建立,獲取,更新和刪除就可以完成相關的操作和處理。您可以通過統一資源識別符號(Universal Resource Identifier,URI)來識別和定位資源,並且針對這些資源而執行的操作是通過 HTTP 規範定義的。其核心操作只有GET,PUT,POST,DELETE。

   由於REST強制所有的操作都必須是stateless的,這就沒有上下文的約束,如果做分散式,叢集都不需要考慮上下文和會話保持的問題。極大的提高系統的可伸縮性。

2.restful目前使用現狀

   目前真正實現rest概念的元件比較少,大多數程式設計師所謂的rest只不過是以GET訪問某個URL。對java而言,後臺大多數使用spring來處理各類引數及路徑引數。但這並不真正符合Rest的本義,原始的Rest是把所有資源都虛擬化為URL/URI來表示,所有操作都使用HTTP的幾個動作來完成。之前最純正的REST實現是RestLet,RestLet基本完全按照作者的博士論文的思路來設計;後邊陸續出了一些介於http與原始rest的實現,前段時間Linkedin出了一個

http://Rest.Li,該專案主要是把基於文字的協議修改為二進位制協議,效率自然沒得說,但引入了過多的複雜性,違背了rest簡潔的本意。

   現實中的大多數專案,效能的瓶頸主要集中在後端業務邏輯及演算法,協議本身導致效能低下的較少。


3.SOAP Webservice和RESTful Webservice

  WebService是一種能夠使應用程式在不同的平臺使用不同的程式語言進行通訊的技術規範,而這種技術規範的實現可以用不同的方法,比如使用基於XML形式的協議(SOAP)進行通訊或者是RESTFUL形式的。

  既然我們知道可以使用上面的兩種形式進行通訊,那麼我們就需要對上面的兩種形式進行描述,規範化。而這些規範化的工作sun已經幫我們完成了,也就是JAX-WS,JAX-RS這兩種規範。

  JAX-WS是一種規範,而在jdk1.6之後就有了自帶的實現,但是這種實現是比較簡單的,基本上就只能夠傳遞SOAP協議格式的訊息。這就是為什麼我們可以在沒有axis2或者CXF的情況下開發WebService。  這時候我們就會想了,如果我們需要其他的服務,比如我想讓JAX-WS與Spring整合。這種需求前輩都已經考慮過了,也實現了,不需要我們在去實現這樣的需求。而這種需求的解決方案在JAX-WS中是採用框架。而JAX-WS的框架就有AXIS2和CXF。框架使用起來可能會更加靈活,功能更加強大。比如CXF不僅僅實現JAX-WS,也實現了JAX-RS規範。

   那麼選擇SOAP Webservice和Restful Webservice的使用,首先需要理解就是SOAP偏向於面向活動,有嚴格的規範和標準,包括安全,事務等各個方面的內容,同時SOAP強調操作方法和操作物件的分離,有WSDL檔案規範和XSD檔案分別對其定義。而REST強調面向資源,只要我們要操作的物件可以抽象為資源即可以使用REST架構風格。

   下一篇部落格主要介紹如何開發RESTful服務。