天天看點

【接口】Rest和WebService

先轉一篇部落格:https://blog.csdn.net/ningjiebing/article/details/90602470

首先需要了解:REST是一種架構風格,其核心是面向資源;而webService底層SOAP協定,主要核心是面向活動;

 相關概念:

  SOAP

  什麼是SOAP,我想不用多說,google一把滿眼都是。其實SOAP最早是針對RPC的一種解決方案,簡單對象通路協定,很輕量,同時作為應用協定可以基于多種傳輸協定來傳遞消息(Http,SMTP等)。但是随着SOAP作為WebService的廣泛應用,不斷地增加附加的内容,使得現在開發人員覺得SOAP很重,使用門檻很高。在SOAP後續的發展過程中,WS-*一系列協定的制定,增加了SOAP的成熟度,也給SOAP增加了負擔。

  REST

  REST其實并不是什麼協定也不是什麼标準,而是将Http協定的設計初衷作了诠釋,在Http協定被廣泛利用的今天,越來越多的是将其作為傳輸協定,而非原先設計者所考慮的應用協定。SOAP類型的WebService就是最好的例子,SOAP消息完全就是将Http協定作為消息承載,以至于對于Http協定中的各種參數(例如編碼,錯誤碼等)都置之不顧。其實,最輕量級的應用協定就是Http協定。Http協定所抽象的get,post,put,delete就好比資料庫中最基本的增删改查,而網際網路上的各種資源就好比資料庫中的記錄,對于各種資源的操作最後總是能抽象成為這四種基本操作,在定義了定位資源的規則以後,對于資源的操作通過标準的Http協定就可以實作,開發者也會受益于這種輕量級的協定。

  REST專門針對網絡應用設計和開發方式,以降低開發的複雜性,提高系統的可伸縮性。REST提出設計概念和準則為:

  1. 網絡上的所有事物都可以被抽象為資源(resource)

  2. 每一個資源都有唯一的資源辨別(resource identifier),對資源的操作不會改變這些辨別

  3. 所有的操作都是無狀态的

  REST簡化開發,其架構遵循CRUD原則,該原則告訴我們對于資源(包括網絡資源)隻需要四種行為:建立,擷取,更新和删除就可以完成相關的操作和處理。我們可以通過統一資源辨別符(Universal Resource Identifier,URI)來識别和定位資源,并且針對這些資源而執行的操作是通過 HTTP 規範定義的。其核心操作隻有GET,PUT,POST,DELETE。由于REST強制所有的操作都必須是stateless的,這就沒有上下文的限制,如果做分布式,叢集都不需要考慮上下文和會話保持的問題。極大的提高系統的可伸縮性。

  SOAP webService有嚴格的規範和标準,包括安全,事務等各個方面的内容,同時SOAP強調操作方法和操作對象的分離,有WSDL檔案規範和XSD檔案分别對其定義。

  如果從這個意義上講,是否使用REST就需要考慮資源本身的抽象和識别是否困難,如果本身就是簡單的類似增删改查的業務操作,那麼抽象資源就比較容易,而對于複雜的業務活動抽象資源并不是一個簡單的事情。比如校驗使用者等級,轉賬,事務處理等,這些往往并不容易簡單的抽象為資源。

  其次如果有嚴格的規範和标準定義要求,而且前期規範标準需要指導多個業務系統內建和開發的時候,SOAP風格由于有清晰的規範标準定義是明顯有優勢的。我們可以在開始和實作之前就嚴格定義相關的接口方法和接口傳輸資料。(很多情況下是為了相容以前項目且前台調用邏輯代碼都不能動的前提下,更改底層應用,一般就需要使用webService模式開發,因為老代碼中已經有了明确的方法定義以及參數類型、個數等申明)

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

————————————————

通過上一篇部落格說明,REST的優勢是輕量級,簡單調用;而soap慢慢系統化規範化,适用于面向複雜的活動服務。

rest api和webservice 的差別比較

轉載至:https://blog.csdn.net/u011221715/article/details/47036735

 一般用戶端通路伺服器端web服務通常可以由HTTPService、WebService、RemoteObject等方式來實作。通常實作web服務我們最容易想到的是SOAP協定的WebService,這在目前web服務中占有很重要的地位。随着REST思想的出現,目前很多公司開始使用REST風格的WebService。

   SOAP: 簡單對象通路協定,簡單對象通路協定(SOAP)是一種輕量的、簡單的、基于 XML 的協定,它被設計成在 WEB 上交換結構化的和固化的資訊。 SOAP 可以和現存的許多網際網路協定和格式結合使用,包括超文本傳輸協定( HTTP),簡單郵件傳輸協定(SMTP),多用途網際郵件擴充協定(MIME)。它還支援從消息系統到遠端過程調用(RPC)等大量的應用程式。

     REST: 即REST(Representational State Transfer表述性狀态轉移)是一種針對網絡應用的設計和開發方式,可以降低開發的複雜性,提高系統的可伸縮性。

     REST 與SOAP的比較: 

成熟度

     SOAP目前成熟,不同平台,開發語言之間通過SOAP來互動的web service都能夠較好的互通。REST相對不太成熟,由于沒有類似于SOAP的權威性協定作為規範,REST實作的各種服務風格不一,通用性不強。

效率和易用性

     SOAP使用門檻高(學習成本高,開發難度大),由于SOAP由于各種需求不斷擴充其本身協定的内容,在大并發下性能有所下降。REST 目前大量的Web 2.0網站使用,高效以及簡潔易用。這種高效一方面源于其面向資源接口設計以及操作抽象簡化了開發者的不良設計,同時也最大限度的利用了Http最初的應用協定設計理念。REST 是一種輕量級的Web Service架構風格,其實作和操作明顯比SOAP和XML-RPC更為簡潔,可以完全通過HTTP協定實作,還可以利用緩存Cache來提高響應速度,性能、效率和易用性上都優于SOAP協定。

安全性

     SOAP在安全方面是通過使用XML-Security和XML-Signature兩個規範組成了WS-Security來實作安全控制的,目前已經得到了各個廠商的支援,.net ,php ,java 都已經對其有了很好的支援。REST沒有任何規範對于安全方面作說明。是以在考慮安全性上,SOAP要高于REST。

     總的來說,我認為REST對于資源型服務接口來說很合适,同時特别适合對于效率要求很高,但是對于安全要求不高的場景。而SOAP的成熟性可以給需要提供給多開發語言的,對于安全性要求較高的接口設計帶來便利。

Rest Service具備Web Service的所有特點:平台獨立、松耦合、互操作性。并且,Rest 更輕量級,更簡單。可以這麼說吧,Rest Service 是Web Service的一種實作,并不是說Rest是Web service替代。