SOAP 與 REST 之間有何差異?
SOAP 和 REST 是兩種網際網路資料交換機制。例如,假設您的內部帳戶系統與客戶的會計系統共用資料,以自動化發票開具任務。這兩個應用程式會使用定義通訊規則的 API 來共用資料。SOAP 和 REST 是 API 設計的兩種不同的方法。SOAP 方法高度結構化,並使用 XML 資料格式。REST 更靈活,允許應用程式以多種格式交換資料。
SOAP 與 REST 之間有什麼相似之處?
若要建置應用程式,您可以使用許多不同的程式設計語言、架構和平台。因為其具有不同的資料格式,因此在這種不同的技術之間共用資料極具挑戰性。SOAP 和 REST 都是為了設法解決這個問題而設計。
您可以使用 SOAP 和 REST,在不同的應用程式之間建置 API 或通訊點。術語 Web 服務和 API 可互換使用。但是,API 是更廣泛的類別。Web 服務是一種特殊類型的 API。
以下是 SOAP 與 REST 之間的其他相似之處:
- 兩者都描述了有關應用程式如何發出、處理和回應其他應用程式的資料請求的規則和標準
- 兩者都使用標準化的網際網路協定 HTTP 來交換資訊
- 兩者都支援 SSL/TLS 以實現安全性、加密的通訊
您可以使用 SOAP 或 REST 來建置安全、可擴充且容錯的分散式系統。
SOAP API 和 REST API 的運作方式?
SOAP 是一種較舊的技術,需要系統之間建立嚴格的通訊合約。隨著時間的推移,增加了新的 Web 服務標準,以適應技術變化,但它們會產生額外的開銷。REST 是在 SOAP 之後開發的,本質上解決了其許多不足之處。REST Web 服務也稱為 RESTful Web 服務。
SOAP API
SOAP 是定義剛性通訊規則的協定。它有幾個關聯的標準,用於控制資料交換的各個方面。例如,以下是 SOAP 使用的一些標準:
- Web Services Security (WS-Security) 指定安全措施,例如使用稱為 tokens 的不重複識別符
- Web Services Addressing (WS-Addressing) 需要包含路由資訊做為中繼資料
- WS-ReliableMessaging 會標準化 SOAP 訊息中的錯誤處理
- Web Services Description Language (WSDL) 描述 SOAP Web 服務的適用範圍和功能
當您將請求傳送至 SOAP API 時,必須將 HTTP 請求封裝在 SOAP 封套中。這是修改具有 SOAP 請求要求之基礎 HTTP 內容的資料結構。由於採用封套,您還可以使用其他傳輸協定,例如 TCP 或網際網路控制訊息通訊協定 (ICMP),將請求傳送至 SOAP Web 服務。不過,SOAP API 和 SOAP Web 服務一律會在其回應中傳回 XML 文件。
REST API
REST 是一種軟體架構樣式,對 API 的運作方式施加了條件。以下是 REST API 遵循的六項原則:
- 用戶端-伺服器架構。傳送者和接收者在技術、平台化、程式設計語言等方面彼此獨立。
- 分層。伺服器可以有多個中繼協作完成用戶端請求,但它們對客戶來說是不可見的。
- 統一介面。API 會以完整且可完全使用的標準格式傳回資料。
- 無狀態。API 會完成每個新要求,與之前的請求無關。
- 可快取。所有 API 回應都可以快取。
- 隨需編碼。如有需要,API 回應可包含程式碼片段。
您可以使用 GET 和 POST 等 HTTP 動詞來傳送 REST 請求。Rest API 回應通常採用 JSON 格式,但也可以是不同的資料格式。
何時使用 SOAP 與 REST?
在 SOAP 與 REST 之間進行選擇之前,請考慮您的案例和 API 使用者的需求。以下標準值得考慮。
整體應用程式設計
行動應用程式和混合應用程式等現代應用程式,選擇使用 REST API 會更好。REST 為您提供可擴展性和靈活性,以使用微型服務和容器等現代架構模式來設計應用程式。但是,如果您需要整合或擴充已有 SOAP API 的舊式系統,則最好繼續使用 SOAP。
安全性
公有 API 的安全性需求較低,要求具有更大的靈活性,因此任何人都可與之互動。因此,當您建置公有 API 時,REST 是更好的選擇。相反,一些針對內部企業需求的私有 API (例如資料符合性報告) 可能會受益於 SOAP 的 WS-Security 中更嚴格的安全措施。
ACID 合規
您的 API 使用者是否需要跨交易鏈中具有嚴格的一致性和資料完整性? 例如,即使是一次更新失敗,財務交易也要求整批資料更新失敗。
SOAP 具有內建的原子性、一致性、隔離性和持久性 (ACID) 等方面的合規性。而 SOAP 可能更適合較高的資料完整性要求。在這種情況下,REST API 可能需要其他軟體模組,才能在伺服器或資料庫層級強制執行狀態。
主要差異:SOAP 與 REST
SOAP 是一種協定,而 REST 是一種架構樣式。這在 SOAP API 和 REST API 的行為方式上產生了顯著差異。
設計
SOAP API 公開函數或操作,而 REST API 為資料驅動。例如,考慮包含其他應用程式可操縱的員工資料的應用程式。應用程式的 SOAP API 可公開稱為 CreateEmployee 的函數。若要建立員工,傳送請求時,您可在 SOAP 訊息中指定函數名稱。
但是,應用程式的 REST API 可能會公開稱為 /employees 的 URL,而對該 URL 的 POST 請求則會建立新的員工記錄。
靈活性
SOAP API 是固定的,只允許應用程式之間的 XML 訊息傳遞。應用程式伺服器也必須維護每個用戶端的狀態。這意味著在處理新請求時,其必須記住所有之前的請求。
REST 更加靈活,並允許應用程式以純文字、HTML、XML 和 JSON 格式傳輸資料。REST 也是無狀態的,因此 REST API 獨立於之前的請求來處理每個新請求。
效能
SOAP 訊息更大、更複雜,這讓其傳輸和處理速度更慢。這可能會增加頁面載入時間。
由於 REST 的訊息較小,REST 比 SOAP 更快、更高效。REST 回應也可快取,因此,伺服器可將經常存取的資料存放在快取中,以縮短頁面載入時間。
可擴展性
SOAP 協定需要應用程式在請求之間存放狀態,這會增加頻寬和記憶體需求。因此,這讓應用程式昂貴且難以擴展。
與 SOAP 不同,REST 允許無狀態和分層架構,這讓其更具可擴展性。例如,應用程式伺服器可將請求傳遞給其他伺服器,或允許中繼 (如內容傳遞網路) 來處理。
安全性
SOAP 需要額外的 WS-Security 層,才能與 HTTPS 搭配使用。WS-Security 會使用額外的標頭內容,以確保只有特定伺服器中的指定程序讀取 SOAP 訊息內容。這增加了通訊開銷,並對效能產生負面影響。
REST 支援 HTTPS,而無需額外的開銷。
可靠性
SOAP 內建錯誤處理邏輯,並且提供更高的可靠性。另一方面,REST 需要您在通訊故障時再次嘗試,並且不太可靠。
SOAP 與 REST 之間的差異摘要
SOAP |
REST |
|
含義 |
簡單物件存取協定 |
表現層狀態轉換 |
這是什麼? |
SOAP 是用於應用程式之間通訊的協定 |
REST 是用於設計通訊介面的架構樣式。 |
設計 |
SOAP API 公開操作。 |
REST API 公開資料。 |
傳輸協定 |
SOAP 具有獨立性,可與任何傳輸協定搭配使用。 |
REST 僅可與 HTTPS 搭配使用。 |
資料格式 |
SOAP 僅支援 XML 資料交換。 |
REST 支援 XML、JSON、純文本、HTML。 |
效能 |
SOAP 訊息較大,這使得通訊會變慢。 |
REST 訊息較小且具有快取支援,因此效能更快。 |
可擴展性 |
SOAP 很難擴展。伺服器透過存放與用戶端交換的所有之前的訊息來維護狀態。 |
REST 很容易擴展。它是無狀態的,因此每則訊息都獨立於之前的訊息進行處理。 |
安全性 |
SOAP 支援加密並具有額外的開銷。 |
REST 支援加密而不影響效能。 |
使用案例 |
SOAP 在舊式應用程式和私有 API 中非常有用。 |
REST 在現代應用程式和公有 API 中非常有用。 |
AWS 如何支援您的 API 需求?
Amazon Web Services (AWS) 提供 Amazon API Gateway 來支援您的 API 需求。API Gateway 是一種全受管的服務,可讓開發人員輕鬆地建立、發佈、維護、監控和保護任何規模的 API。使用 API Gateway 時,您可以建立 REST API,以啟用即時雙向通訊應用程式。
以下是您可透過使用 API Gateway 獲益的方法:
- 為您的使用者提供 API 請求和回應的高速效能。
- 利用 AWS Identity and Access Management (IAM) 和 Amazon Cognito,授與對 API 的存取權。這兩種服務都提供原生 OAuth 支援。
- 同時執行相同 API 的多個版本,快速重複執行、測試和發行新的版本。
- 監控有關 API 呼叫、資料延遲和錯誤率的效能指標和資訊。
立即建立 AWS 帳戶,開始使用 REST APIs on AWS。