SOAP 與 REST 之間有何差異?

SOAP 和 REST 是兩種網際網路資料交換機制。例如,假設您的內部帳戶系統與客戶的會計系統共用資料,以自動化發票開具任務。這兩個應用程式會使用定義通訊規則的 API 來共用資料。SOAP 和 REST 是 API 設計的兩種不同的方法。SOAP 方法高度結構化,並使用 XML 資料格式。REST 更靈活,允許應用程式以多種格式交換資料。

閱讀有關 API 的內容 »

閱讀有關 XML 的內容 »

SOAP 與 REST 之間有什麼相似之處?

若要建置應用程式,您可以使用許多不同的程式設計語言、架構和平台。因為其具有不同的資料格式,因此在這種不同的技術之間共用資料極具挑戰性。SOAP 和 REST 都是為了設法解決這個問題而設計。

您可以使用 SOAP 和 REST,在不同的應用程式之間建置 API 或通訊點。術語 Web 服務API 可互換使用。但是,API 是更廣泛的類別。Web 服務是一種特殊類型的 API。

以下是 SOAP 與 REST 之間的其他相似之處:

  • 兩者都描述了有關應用程式如何發出、處理和回應其他應用程式的資料請求的規則和標準
  • 兩者都使用標準化的網際網路協定 HTTP 來交換資訊
  • 兩者都支援 SSL/TLS 以實現安全性、加密的通訊

您可以使用 SOAP 或 REST 來建置安全、可擴充且容錯的分散式系統。

閱讀有關 SSL 憑證的內容 »

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 遵循的六項原則:

  1. 用戶端-伺服器架構。傳送者和接收者在技術、平台化、程式設計語言等方面彼此獨立。
  2. 分層。伺服器可以有多個中繼協作完成用戶端請求,但它們對客戶來說是不可見的。
  3. 統一介面。API 會以完整且可完全使用的標準格式傳回資料。
  4. 無狀態。API 會完成每個新要求,與之前的請求無關。
  5. 可快取。所有 API 回應都可以快取。
  6. 隨需編碼。如有需要,API 回應可包含程式碼片段。

您可以使用 GETPOST 等 HTTP 動詞來傳送 REST 請求。Rest API 回應通常採用 JSON 格式,但也可以是不同的資料格式。

閱讀有關 RESTful 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。

與 AWS 搭配使用的後續步驟

開始使用 REST API 進行建置
開始使用 SOAP API 進行建置