
SOAP(Simple Object Access Protocol)は、ネットワーク越しに構造化情報を交換するためのXMLベースのメッセージングプロトコルです。1998年にMicrosoftのDave Winer氏らが中心となって設計し、その後W3Cで標準化されてエンタープライズ向けWebサービスの標準として2000年代前半に広く普及しました。HTTP・SMTP・TCPなどさまざまなトランスポート上で動作し、Envelope・Header・Bodyという厳密な構造を持つXMLメッセージにより、RPC(Remote Procedure Call)やドキュメント交換を実現します。WS-Security・WS-ReliableMessagingなどの拡張仕様(WS-*)と組み合わせることで、暗号化・署名・トランザクション・信頼性の高いメッセージングを統合的にサポートする点が特徴で、金融・行政・大規模BtoBシステムで現在も稼働を続けています。
この記事の目次
- SOAPメッセージを構成する基本要素
- SOAPの典型的な処理フロー
- SOAPを採用する前にチェックすべき項目
- SOAPとRESTを比較する視点
- まとめ
SOAPメッセージを構成する基本要素

SOAPメッセージは、ルート要素であるEnvelopeの中にHeaderとBodyという2つの主要セクションを持つXMLとして表現されます。Envelopeはメッセージ全体の境界を定義し、名前空間として「http://schemas.xmlsoap.org/soap/envelope/」や「http://www.w3.org/2003/05/soap-envelope」を宣言します。Headerは認証情報・トランザクションID・リトライ要件など、ペイロードそのものではない制御メタ情報を載せるための領域で、WS-Securityなどの拡張仕様はここに乗ります。
Body要素には実際のリクエストパラメータやレスポンスデータが格納され、サーバ側で処理エラーが発生した場合はBody内にFault要素を返すルールになっています。Faultはfaultcode・faultstring・detailといった子要素を持ち、エラー種別と詳細を構造化された形でクライアントに伝達します。この厳格な構造により、SOAPは「人間が読みやすい」というよりは「機械が確実にパースし、契約に基づいて処理する」ことを最優先したプロトコルになっています。
SOAPの典型的な処理フロー

SOAPの典型的な処理は、まずクライアントがサーバから提供されるWSDL(Web Services Description Language)ファイルを取得するところから始まります。WSDLはサービス名・エンドポイントURL・利用可能なオペレーション・入出力スキーマをXMLで宣言したインタフェース定義で、JavaのJAX-WSや.NETのWCFはこれを読み込んでクライアントのスタブクラスを自動生成します。
クライアントは生成されたスタブを呼び出すだけで、内部的にはSOAPエンベロープを組み立ててHTTP POSTでサーバへ送信します。サーバはBody内のメソッド呼び出しを解釈してビジネスロジックを実行し、結果をSOAPメッセージとして返却します。拡張仕様であるWS-Securityを併用すると、XML署名やXML暗号化によってメッセージ単位での認証・改ざん検知が可能になり、トランスポート層のTLSとは別の階層でセキュリティを確立できるのが特徴です。
SOAPを採用する前にチェックすべき項目

新規開発でSOAPを選ぶケースは限定的ですが、既存システムとの連携では今なお必須となる場面が多くあります。採用を検討する際には、まず対向となる金融機関・行政機関・大手企業のシステムがSOAPを前提としているかを確認し、WSDLが提供されているかを早期に把握することが重要です。WSDLが整備されていれば、各種言語のツール(wsimport、svcutil、suds、zeepなど)でクライアントを自動生成でき、開発工数を大幅に削減できます。
拡張仕様であるWS-Security・WS-ReliableMessaging・WS-AtomicTransactionなどの利用有無は、実装上の難易度を大きく左右します。電子署名やトークン形式(X.509、SAML、UsernameToken)に関する要件は仕様書を見ながら正確に把握しないと相互運用に失敗します。また、SOAPはXMLベースのためメッセージサイズが大きくなりがちで、添付ファイルを扱う場合はMTOM/XOPの利用を検討する必要があります。使用する言語のSOAPライブラリが活発にメンテナンスされているかも、長期運用では重要な確認事項となります。
SOAPとRESTを比較する視点

SOAPとRESTはしばしば対比されますが、両者は思想と適用領域が異なります。SOAPは「厳密な契約に基づくRPC」を指向しており、WSDLで定義された型と操作を双方が共有することで、コンパイル時に型安全性を確保しつつ、WS-Securityなどの追加機能をプロトコルレベルで保証します。金融・保険・公共系のように規制が厳しく、メッセージ単位の署名・暗号化・トランザクション保証が求められる領域では今なお有力な選択肢です。
一方REST/OpenAPIは、HTTPメソッドとURIをそのまま意味として用いる「リソース指向」の設計を採用し、JSONによる軽量な表現とブラウザフレンドリな性質を武器に、Webサービス全般のデファクトとなりました。ペイロードサイズ・レイテンシ・ツールチェーンの豊富さ・モバイル親和性の観点ではRESTが優位ですが、契約の厳密さやメッセージ単位のセキュリティを重視するならSOAPの設計は今でも有意義です。新規システムはREST中心としつつ、既存SOAPとの接続部分はゲートウェイで吸収する構成が現実的な落としどころになります。
まとめ
SOAPは、XMLの厳密さとWS-*拡張による高度なセキュリティ・信頼性を備えた、エンタープライズWebサービスの古典的標準です。RESTやgRPCといった軽量プロトコルが主流となった現在でも、金融・行政・大規模BtoBの基幹システムでは強固な存在感を保っています。新規開発で第一候補に上がる場面は減りましたが、レガシーシステムとの統合や厳密な契約を求める領域では、いまだに重要な選択肢として理解しておくべきプロトコルです。
※本記事はIT用語辞典の手書きドラフトです。公開前に最新情報・出典を確認のうえ加筆修正してください。

コメント