SOAP與REST API的愛恨情仇
阿新 • • 發佈:2020-02-07
之前一直想寫些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)和佇列位置,該位置上,任務的完成狀態將會被定期更新(當然,我們也可以將完成狀態資訊存在資料庫中,並定期新增狀態資訊,供客戶端查詢)。
作者:吳家二少
部落格地址:https://www.cnblogs.com/cloudman-open/
本文歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連線