| 維度 | SOAP | REST |
|---|---|---|
| 本質 | 協議規範 | 架構風格 |
| 傳輸 | HTTP、SMTP、JMS 等任意協議 | 僅 HTTP(充分利用 HTTP 語義) |
| 訊息格式 | XML(SOAP Envelope) | XML、JSON、YAML、Protobuf 任意 |
| 介面定義 | WSDL(強契約) | 無標準(Swagger/OpenAPI、RAML、Postman 集合) |
| 狀態管理 | 支援 WS-* 協議實現有狀態 | 無狀態 |
| 操作語義 | RPC 風格(方法呼叫) | 資源導向(CRUD 對應 HTTP 動詞) |
GET /users/123 vs getUser?id=123GET 查詢、POST 建立、PUT 全量更新、PATCH 部分更新、DELETE 刪除。| 層級 | 特徵 | 代表 |
|---|---|---|
| Level 0 | 單一 URI、單一 POST、XML/RPC | 早期 XML-RPC |
| Level 1 | 資源導向 URI | /users/123 |
| Level 2 | HTTP 動詞、狀態碼、Header | 大多數「RESTful」API |
| Level 3 | HATEOAS(超媒體) | GitHub API、HAL、JSON:API |
| 場景 | 推薦 | 理由 |
|---|---|---|
| 企業內部異構系統整合、強契約、高安全合規 | SOAP | WSDL 契約、WS-Security、事務傳播 |
| 公網開放 API、移動端/前端調用、微服務內部通訊 | REST | 輕量、易用、快取、前端友好 |
| 高效能、大流量、無狀態 CRUD | REST | HTTP 語義、連線池、無狀態水平擴展 |
| 複雜業務流程、長事務、需可靠傳訊 | SOAP / gRPC | WS-ReliableMessaging、gRPC 雙向流 |
| 團隊熟悉度高、維護成本敏感 | 團隊熟悉者 | 技術債避免、人才匹配 |
/getUser、/deleteOrderaction=delete{code:0, msg:"ok"}技術無優劣,只有適不適合。 SOAP 在強契約、高安全、企業級整合佔優;REST 在公網 API、微服務、前端整合、高併發無狀態場景佔優。選型前先問三個問題:
1. 消費者是誰?(內部異構 vs 外部開發者/前端)
2. 安全合規要求?(訊息級 vs 傳輸級)
3. 團隊技術棧與維護能力?(WS-* 專家 vs 全棧工程師)