1. 程式人生 > >SOAP與REST API的愛恨情仇

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/cloudman-open/

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