SOAP與REST API的區別


之前一直想寫些RESTful相關的文章,卻一直未付諸行動。直到最近接手一個新的項目,對這塊重新溫習,乘此機會寫些相關帖子。歡迎大家評論留言,如有錯漏之處,也望各位大佬不令賜教。

話不多說,干活頂上。


SOAP(Simple Object Access Protocol - 簡單對象訪問協議)定義了一種強類型的消息傳遞框架,該框架高度依賴XML和schemas。
REST(Representation State Transfer - 表示狀態轉移)是一種架構樣式風格,它利用了當下被廣泛采用的技術(特別是HTTP),本身卻不創建任何新的標准。REST可以將數據結構序列化為XML,YAML或任何其他機器可讀格式,但通常首選JSON。
 
SOAP和REST都支持構建基於應用程序的SOA(Service-oriented architecture,面向服務的架構),在實際項目中如何選擇主要看業務的需求是什么。那如何選擇呢?
這便是今天的重點,討論下兩者的主要區別。今天主要從一下幾個方面進行區別:
 
底層協議
  • SOAP本身便是基於HTTP而發展的協議。
  • REST與HTTP幾乎一樣,REST規范沒有強制的要求。
數據格式
  • SOAP只依靠XML來提供消息傳遞服務。在某些情況下,消息傳遞服務可能變得極其復雜。例如,通過javascript訪問Web服務,
  • REST可以語言自由的選擇易解析的數據格式。例如,CSV、JSON、XML、YAML等等。 
有狀態
  • SOAP Web服務是無狀態的,但是可以通過修改服務器上的代碼輕松變為有狀態的。
  • RESTful Web服務是完全無狀態的。對話狀態的管理完全由客戶端進行控制。服務端不保留任何狀態信息。也就是我們通常所說的,客戶端的每次請求必須攜帶所有可能用到的信息。

HTTP的方法使用

  • SOAP可以對HTTP協議進行綁定。當綁定HTTP協議時,所有的SOAP請求都通過HTTP POST發送。
  • REST主要使用HTTP協議。通過HTTP GET、POST、PUT、DELETE和PATCH方法進行CRUD操作。
緩存
  • SOAP可以使用HTTP傳輸機制,但是都轉換為HTTP POST方法。而POST是非冪等的,所以無法在HTTP級別進行緩存。因此SOAP的響應需要通過 Response Caching Optimization Module給的信息進行緩存。
  • REST可以發送HTTP GET請求,GET是冪等的,因此REST可以使用HTTP提供的緩存機制,使響應數據可以標記為可緩存或不可緩存。
安全
  • SOAP通過WS-SECURITY對安全進行了很好的標准化。
  • REST主要使用HTTP協議,HTTP本身是非常不安全的,但通過TLS它可以支持基礎的身份認證和通信加密,即HTTPS。此外,在服務器上還可以進一步實施安全措施。
異步處理

創建和更新通常非常消耗資源,有時會需要異步請求處理。

  • SOAP 1.2提供了額外的標准,可保證應用的可靠性和安全性。例如:WSRM – WS-Reliable Messaging
  • REST我們通常返回HTTP狀態碼202(Accepted)和隊列位置,該位置上,任務的完成狀態將會被定期更新(當然,我們也可以將完成狀態信息存在數據庫中,並定期新增狀態信息,供客戶端查詢)。
總結
總體而言,REST更易於開發,因為它利用了已經存在的Web,並且自由度受到限制(做出的選擇更少,因此更簡單)。SOAP提供了多種選擇,並且開發難度也稍大一些,但是提供了更多的選擇。

作者:吳家二少

博客地址:https://www.cnblogs.com/wu-kai/

本文歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM