SOAP和REST

SOAP: Simple Object Access Protocolweb

REST: Representation State Transfer瀏覽器

SOAP的簡單介紹

 SOAP可以使用多種協議進行傳輸,用於解決RPC(Remote Procedure Call)緩存

當給http的header設置SOAPAction(它的值爲server的url)時,就指定了此次請求爲Soap 請求。request body是xml格式的。Envelope裏面記錄着要調用的方法名,若是該方法還有參數的話,還會有參數名和值。安全

以下,一次請求和應答:服務器

POST /StockQuote HTTP/1.1 Host: www.server.com Content-Type: text/xml;  charset="utf-8" Content-Length: 555 SOAPAction: "Server-URI"

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">/**這兩個命名空間是必須的*/

<SOAP-ENV:Body>
<m:GetLastTradePrice xmlns:m="Server-URI">   
  <symbol>DIS</symbol>
</m:GetLastTradePrice>
 </SOAP-ENV:Body>
</SOAP-ENV:Envelope>
HTTP/1.1 200 OK Content-Type: text/xml;  charset="utf-8" Content-Length:555 <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> /**這兩個命名空間是必須的*/
   <SOAP-ENV:Body>
       <m:GetLastTradePriceResponse xmlns:m="Server-URI">
           <Price>34.5</Price>
       </m:GetLastTradePriceResponse>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

SOAP協議能夠簡單地理解爲:SOAP=RPC+HTTP+XML,即採用HTTP做爲通訊協議,RPC做爲一致性的調用途徑,XML做爲數據傳送的格式,從而容許服務提供者和服務客戶通過防火牆在Internet上進行通訊交互。網絡

WSDL(Web Service Description Language)用來描述哪一個服務器提供什麼服務,怎麼找到它,以及該服務使用怎樣的接口規範。架構

使用Web Service的過程:得到該服務的WSDL描述,根據WSDL構造一條格式化的SOAP請求,發送給Web Service,而後接收一條一樣的SOAP格式的應答,最後根據WSDL解碼數據。less

SOAP每次請求web service用的都是HTTP的post方法。這一點使得SOAP在當下流行的分佈式網絡應用中的表現遠遠不如REST。
SOAP還能夠與其餘傳輸協議搭配使用,TCP,UDP,SMTP,MIME均可以,這是他的優勢分佈式

 REST的簡單介紹

相比SOAP, REST更輕量。web2.0的興起,REST成爲了流行架構風格。post

它是 ROA(Resource-Oriented Architecture)的。它把網絡上全部的事物都抽象成資源(resource)。這個資源是數據和表現形式的組合。每一個資源都有其對應的資源標識符URI(Uniform Resource Identifier),對資源的全部操做都被抽象成CRUD。

用REST原則設計的軟件、體系結構都很RESTful。

REST的CRUD正好對應了HTTP的post/get/put/delete。這使得分佈式服務應用中的代理服務器有了更大的用武之地。好比proxy server能夠根據此次請求是GET 請求來作好緩存工做。還能夠作權限過濾,好比哪些IP段的不能夠作POST操做。這在SOAP裏是徹底不可能的,由於SOAP用的是HTTP的post,proxy server沒法知道這是個查詢,能夠從緩存中取數據。若是SOAP要實現這些的話,還須要拆envelope以及知道真正的服務器端每一個方法的用途,這樣的耦合是徹底不合理的。

REST還可使用爲目前大多數瀏覽器支持的XMLHttpRequest對象,這爲AJAX增色很多。

REST 構建的系統其系統的擴展能力要強於 SOAP,這能夠體如今它的統一接口抽象、代理服務器支持、緩存服務器支持等諸多方面。

而SOAP的成熟性能夠給須要提供給多開發語言的,多傳輸方式的,對於安全性要求較高的接口設計帶來便利。

 

還有好些特性不能完整的理解:

REST的stateless

SOPA怎麼使用WS-Security, WS-Transactions,和WS-Coordination的,它是用這些來保持狀態的嗎?

 

refer: https://juejin.im/post/5b8fd9b66fb9a05d0c37aa42

相關文章
相關標籤/搜索