1. SOAP 是什麼(通俗講解)
SOAP 可以理解爲“把調用請求封裝在 XML 信封裏,通過 HTTP 寄送”。先從最簡單的類比開始:
- REST 是“直接說一句話,放在 JSON 包裏發給對方”。
- SOAP 是“一封掛號信,包好信封,寫齊協議,留簽收回執”。
SOAP 的基本結構:
- Envelope(信封)
- Header(報頭,認證、事務信息)
- Body(請求/響應內容)
- Fault(錯誤結構)
示例請求:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ex="http://example.com">
<soapenv:Header/>
<soapenv:Body>
<ex:GetUser>
<ex:id>123</ex:id>
</ex:GetUser>
</soapenv:Body>
</soapenv:Envelope>
2. 傳輸流程(動圖式思維)
- 客戶端拼 SOAP XML
- HTTP POST 到
/ws/user等 SOAP 端點 - 服務端解析、執行業務、返回 SOAP XML
- 客戶端解析成功結果或
Fault錯誤
3. 實操指南(項目中怎麼做)
- 首先使用 WSDL 定義契約。
- 服務器端:
wsdl2java/wsimport生成 stub,確保命名空間一致。 - 客戶端:按命名空間和
action請求,Header 中可帶 WS-Security、token。 - 運行測試時,推薦用
curl直接驗證:
curl -X POST \
-H "Content-Type: text/xml; charset=UTF-8" \
-H "SOAPAction: \"http://example.com/GetUser\"" \
-d @request.xml \
http://localhost:8080/ws/user
- 重要:SOAP 的錯誤通常在響應體
Fault裏,即使 HTTP 200 也要檢查。
4. REST 比對(項目選型核心)
4.1 共同點
- 都可以用 HTTP 作爲傳輸協議
- 都有請求/響應語義
4.2 核心差異
- 數據形式:SOAP 是 XML,REST 常用 JSON
- 契約形式:SOAP 強類型 WSDL,REST 靈活約定(OpenAPI)
- 擴展:SOAP 的 WS-*(安全、事務、可靠性) vs REST 的協議零散
4.3 優劣對照
- SOAP 優勢:企業級規範、可審計、強類型、通用安全標準
- SOAP 劣勢:報文大、解析複雜、線上調試不便、對前端不友好
- REST 優勢:輕量、效率高、調試方便、對Web/Mobile友好
- REST 劣勢:企業級事務/安全需自建(JWT/OAuth/TLS)
4.4 架構選型建議
- 公共 API/前端直連:REST優先
- 供應商、銀行、電信 B2B:SOAP優選或混合網關
- 兼容場景:在API網關層實現“REST->SOAP轉換”保持用戶體驗
5. 結論(最關鍵)
- 2026 年,SOAP 仍是“遺留與高可控的企業內核”,但 REST 是“快速迭代的前端時代標配”。
- 最好把選擇路徑寫到系統架構標準裏:
- 項目類型 + 法規要求 + 速度優先 -> REST
- 交易重吞吐 + 簽名/契約 + 可審計 -> SOAP