webservice和restful的區別

weixin_34377065發表於2015-08-11
REST是一種架構風格,其核心是面向資源,REST專門針對網路應用設計和開發方式,以降低開發的複雜性,提高系統的可伸縮性。REST提出設計概念和準則為:

1.網路上的所有事物都可以被抽象為資源(resource)
2.每一個資源都有唯一的資源標識(resource identifier),對資源的操作不會改變這些標識
3.所有的操作都是無狀態的

REST簡化開發,其架構遵循CRUD原則,該原則告訴我們對於資源(包括網路資源)只需要四種行為:建立,獲取,更新和刪除就可以完成相關的操作和處理。您可以通過統一資源識別符號(Universal Resource Identifier,URI)來識別和定位資源,並且針對這些資源而執行的操作是通過 HTTP 規範定義的。其核心操作只有GET,PUT,POST,DELETE。

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

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

REST ful 應用問題
是否使用REST就需要考慮資源本身的抽象和識別是否困難,如果本身就是簡單的類似增刪改查的業務操作,那麼抽象資源就比較容易,而對於複雜的業務活動抽象資源並不是一個簡單的事情。比如校驗使用者等級,轉賬,事務處理等,這些往往並不容易簡單的抽象為資源。

其次如果有嚴格的規範和標準定義要求,而且前期規範標準需要指導多個業務系統整合和開發的時候,SOAP風格由於有清晰的規範標準定義是明顯有優勢的。我們可以在開始和實現之前就嚴格定義相關的介面方法和介面傳輸資料。

簡單資料操作,無事務處理,開發和呼叫簡單這些是使用REST架構風格的優勢。而對於較為複雜的面向活動的服務,如果我們還是使用REST,很多時候都是仍然是傳統的面向活動的思想通過轉換工具再轉換得到REST服務,這種使用方式是沒有意義的。

效率和易用性
SOAP協議對於訊息體和訊息頭都有定義,同時訊息頭的可擴充套件性為各種網際網路的標準提供了擴充套件的基礎,WS-*系列就是較為成功的規範。但是也由於SOAP由於各種需求不斷擴充其本身協議的內容,導致在SOAP處理方面的效能有所下降。同時在易用性方面以及學習成本上也有所增加。

REST被人們的重視,其實很大一方面也是因為其高效以及簡潔易用的特性。這種高效一方面源於其面向資源介面設計以及操作抽象簡化了開發者的不良設計,同時也最大限度的利用了Http最初的應用協議設計理念。同時,在我看來REST還有一個很吸引開發者的就是能夠很好的融合當前Web2.0的很多前端技術來提高開發效率。例如很多大型網站開放的REST風格的API都會有多種返回形式,除了傳統的xml作為資料承載,還有(JSON,RSS,ATOM)等形式,這對很多網站前端開發人員來說就能夠很好的mashup各種資源資訊

安全性
技術沒有好壞,只有是不是合適,一種好的技術和思想被誤用了,那麼就會得到反效果。REST和SOAP各自都有自己的優點,同時如果在一些場景下如果去改造REST,其實就會走向SOAP(例如安全)。

REST對於資源型服務介面來說很合適,同時特別適合對於效率要求很高,但是對於安全要求不高的場景。而SOAP的成熟性可以給需要提供給多開發語言的,對於安全性要求較高的介面設計帶來便利。所以我覺得純粹說什麼設計模式將會佔據主導地位沒有什麼意義,關鍵還是看應用場景。

同時很重要一點就是不要扭曲了REST現在很多網站都跟風去開發REST風格的介面,其實都是在學其形,不知其心,最後弄得不倫不類,效能上不去,安全又保證不了。

成熟度
SOAP雖然發展到現在已經脫離了初衷,但是對於異構環境服務釋出和呼叫,以及廠商的支援都已經達到了較為成熟的情況。不同平臺,開發語言之間通過SOAP來互動的web service都能夠較好的互通。

由於沒有類似於SOAP的權威性協議作為規範,REST實現的各種協議僅僅只能算是私有協議,當然需要遵循REST的思想,但是這樣細節方面有太多沒有約束的地方。REST日後的發展所走向規範也會直接影響到這部分的設計是否能夠有很好的生命力。

相關文章