ソープ【soap】
ソープ【SOAP】
SOAP
SOAP ソープ
【英】 Simple Object Access Protocol
非集中、分散環境における情報交換のための軽量のプロトコル。Simple Object Access Protocolの略。SOAPはデータ構造のみが規定されており、ベースにはXMLを用いている為、プログラミング言語やプラットフォームに依存しないようになっている。バージョン1.0では下位プロトコルにHTTPのみしか利用できなかったが、1.1ではHTTPはもちろん、暗号化通信のHTTPS、メール通信のSMTP、及びファイルの転送に用いられるFTP等の様々なプロトコルから選択することができる。すでに広く普及しているプロトコルを利用するため、企業間利用においても、ファイルやウォールなどを安全に通過させることができる。SOAPの構成は、ルート要素となる必須の「SOAPエンベロープ」、メッセージの管理に関するデータを格納する「任意のSOAPヘッダ」及び、メインの通信内容を格納する「SOAPボディ」の3つとなっている。
PHPではNuSOAPやPEAR::SOAPなどを使うことで、SOAPプロトコル通信を行える。
関連Webサイト
SOAP
SOAPとは、遠隔地にあるコンピューターのプログラムやデータにアクセスするためのプロトコルのことである。インターネット上に公開された認証機能や課金機能といった個々の機能を呼び出すために用いられる。
SOAPはXMLやHTTPなどをベースとしている。XMLで記述したエンベロープ(封筒)と呼ばれる付帯情報が付いたSOAPメッセージが、HTTPやSMTPなどのトランスポート層に属するプロトコルで交換される。サービスを利用するクライアントと、サービスを提供するサーバーの双方が、SOAPの生成と解釈を行うエンジンを持つことで、異なる環境間でも機能が呼び出せるようになっている。ちなみに、SOAPメッセージの生成エンジンは「SOAPプロキシ」、解釈エンジンは「SOAPリスナー」と呼ばれることもある。
SOAP 1.0では実際にデータの送受信に用いることのできる下位プロトコルはHTTPのみとなる。バージョン1.1では、HTTPやSMTP、FTPなどの、すでに広く普及しているプロトコルから選択できるようになっており、企業間で利用する場合でもファイヤーウォールなどを安全に通過させることができる。
SOAPによって外部からの利用が可能な、部品化されたWebベースのアプリケーションソフトが、Webサービスと呼ばれる。特に、インターネット上で各社が提供しているWebサービスを収集し、誰でも検索・照会できるようにするWebサービスは、UDDIと呼ばれる。
SOAPは、MicrosoftやUserLand Software、Developmentorの各社を中心として開発され、W3Cに提出されている。IBMやLotusなど、大手ソフトウェアメーカーも自社製品での対応を表明している。
なお、「SOAP」の名称は元々「Simple Object Access Protocol」の頭文字とされ、後に「Service Oriented Architecture Protocol」の頭文字であるという解釈も提示されたが、現在では「SOAP」は何かの略称ではなく単に「SOAP」である、という見解に至っている。
SOAP関数
- SOAP_1_1 (integer)
- SOAP_1_2 (integer)
- SOAP_PERSISTENCE_SESSION (integer)
- SOAP_PERSISTENCE_REQUEST (integer)
- SOAP_FUNCTIONS_ALL (integer)
- SOAP_ENCODED (integer)
- SOAP_LITERAL (integer)
- SOAP_RPC (integer)
- SOAP_DOCUMENT (integer)
- SOAP_ACTOR_NEXT (integer)
- SOAP_ACTOR_NONE (integer)
- SOAP_ACTOR_UNLIMATERECEIVER (integer)
- SOAP_COMPRESSION_ACCEPT (integer)
- SOAP_COMPRESSION_GZIP (integer)
- SOAP_COMPRESSION_DEFLATE (integer)
- SOAP_WAIT_ONE_WAY_CALLS (integer)
- PHP 5.1.0 で追加されました。
- UNKNOWN_TYPE (integer)
- XSD_STRING (integer)
- XSD_BOOLEAN (integer)
- XSD_DECIMAL (integer)
- XSD_FLOAT (integer)
- XSD_DOUBLE (integer)
- XSD_DURATION (integer)
- XSD_DATETIME (integer)
- XSD_TIME (integer)
- XSD_DATE (integer)
- XSD_GYEARMONTH (integer)
- XSD_GYEAR (integer)
- XSD_GMONTHDAY (integer)
- XSD_GDAY (integer)
- XSD_GMONTH (integer)
- XSD_HEXBINARY (integer)
- XSD_BASE64BINARY (integer)
- XSD_ANYURI (integer)
- XSD_ANYXML (integer)
- PHP 5.1.0 で追加されました。
- XSD_QNAME (integer)
- XSD_NOTATION (integer)
- XSD_NORMALIZEDSTRING (integer)
- XSD_TOKEN (integer)
- XSD_LANGUAGE (integer)
- XSD_NMTOKEN (integer)
- XSD_NAME (integer)
- XSD_NCNAME (integer)
- XSD_ID (integer)
- XSD_IDREF (integer)
- XSD_IDREFS (integer)
- XSD_ENTITY (integer)
- XSD_ENTITIES (integer)
- XSD_INTEGER (integer)
- XSD_NONPOSITIVEINTEGER (integer)
- XSD_NEGATIVEINTEGER (integer)
- XSD_LONG (integer)
- XSD_INT (integer)
- XSD_SHORT (integer)
- XSD_BYTE (integer)
- XSD_NONNEGATIVEINTEGER (integer)
- XSD_UNSIGNEDLONG (integer)
- XSD_UNSIGNEDINT (integer)
- XSD_UNSIGNEDSHORT (integer)
- XSD_UNSIGNEDBYTE (integer)
- XSD_POSITIVEINTEGER (integer)
- XSD_NMTOKENS (integer)
- XSD_ANYTYPE (integer)
- SOAP_ENC_OBJECT (integer)
- SOAP_ENC_ARRAY (integer)
- XSD_1999_TIMEINSTANT (integer)
- XSD_NAMESPACE (string)
- XSD_1999_NAMESPACE (string)
目次
- is_soap_fault — SOAP コールが失敗したかどうかを調べる
- SoapClient->__call() — SOAP 関数をコールする (推奨されません)
- SoapClient->__construct() — SoapClient コンストラクタ
- SoapClient->__doRequest() — SOAP リクエストを実行する
- SoapClient->__getFunctions() — SOAP 関数の一覧を返す
- SoapClient->__getLastRequest() — 直近の SOAP リクエストを返す
- SoapClient->__getLastRequestHeaders() — 直近の SOAP リクエストヘッダを返す
- SoapClient->__getLastResponse() — 直近の SOAP レスポンスを返す
- SoapClient->__getLastResponseHeaders() — 直近の SOAP レスポンスヘッダを返す
- SoapClient->__getTypes() — SOAP 型の一覧を返す
- SoapClient->__setCookie() — SOAP リクエストと共に送信されるクッキーを設定する
- SoapClient->__soapCall() — SOAP 関数をコールする
- SoapFault->__construct() — SoapFault コンストラクタ
- SoapHeader->__construct() — SoapHeader コンストラクタ
- SoapParam->__construct() — SoapParam コンストラクタ
- SoapServer->addFunction() — SOAP リクエストによって処理される単一もしくはいくつかの関数を追加する
- SoapServer->__construct() — SoapServer コンストラクタ
- SoapServer->fault() — エラーを示す SoapServer フォールト を発行する
- SoapServer->getFunctions() — 定義されている関数の一覧を返す
- SoapServer->handle() — SOAP リクエストを処理する
- SoapServer->setClass() — SOAP リクエストを処理するクラスを設定する
- SoapServer->setPersistence() — SoapServer の持続モードを設定する
- SoapVar->__construct() — SoapVar コンストラクタ
- use_soap_error_handler — SOAP エラーハンドラを使用して前の値を返すかどうかを設定する
SOAP (プロトコル)
TCP/IP群 |
---|
アプリケーション層 |
|
トランスポート層 |
カテゴリ |
インターネット層 |
カテゴリ |
リンク層 |
カテゴリ |
SOAP(ソープ)は、コンピュータネットワーク内のWebサービスの実装において、構造化された情報を交換するための通信プロトコルの仕様である。拡張性、中立性、独立性を導入することを目的とする。XML-RPCから発展した、XML Webサービスのための、XMLベースのRPCプロトコルである。
メッセージ形式としてXMLインフォメーションセットを使用する。また、メッセージのネゴシエーションおよび伝送はアプリケーション層のプロトコル(多くの場合HTTPまたはSMTP)に依存する。
SOAPにより、全く異なるオペレーティングシステム(例えばWindowsとLinux)上で走っているプロセス間でもXMLを使って意思疎通が可能になる。HTTPのようなWebプロトコルは全てのオペレーティングシステムにインストールされて走っているので、SOAPの仕組みを使えば、クライアントはその言語やプラットフォームが何であれ、ウェブサービスを起動してレスポンスを受け取ることが出来る。
元はSimple Object Access Protocolの頭字語とされていたが、現在は「何かの頭字語ではない」とされている[1]。
概要
拡張可能で分散的なフレームワークであり、HTTP以外にも様々なコンピュータネットワークの通信プロトコルで利用することができると主張され、SMTPへのバインディングも示されているが、実際上TCP/IP上のHTTP(S)以外の使用は現実的ではない。主要な実装としてApache Axisがある。多くの実装の間で相互運用性に問題があるとしてWS-Iというコンソーシアムが作られたが、現在はOASISの一部となっている。
いくつかのSOAPメッセージを相互作用させることによってリモートプロシージャコールが実現できる、Webサービスに有効な手段の一つである、などと主張されている。
メッセージの表現にXMLを使用する。メッセージはヘッダとボディから成る。ヘッダはオプショナルであり、ルーティングやセキュリティ、そして トランザクションなどのための情報といったメタ情報を格納する。ボディは、主要な情報すなわちペイロードである。
相互運用性のためにはXML Schemaなどで、なんらかのスキーマを定義することが望ましいであろう。また、WSDLという記述言語がある。
「WS-*」と総称される関連プロトコルが多量にある。
特徴
SOAP はウェブサービスのための「Web services protocol stack」における「Messaging Protocol」層を提供する。SOAPはXMLを基盤とするプロトコルで、三つの部分で構成される:
- 「envelope」(小包)。これはメッセージ構造を定義する[2]。また、どのようにこれを処理すべきかを定義する:
- アプリケーションで定義されるデータ型のインスタンスを表現するためのエンコーディング規則
- プロシージャ呼出しとレスポンスを表すための約束事
SOAPには三つの大きな特徴がある:
- 拡張性 (セキュリティやWS-Addressingなどは開発中の拡張機能である)
- 中立性 (SOAPはHTTP, SMTP, TCP, UDP, JMSなどのいかなるプロトコル上でも運用できる)
- 独立性 (SOAPはいかなるプログラミングモデルでも使える)
SOAPで出来ることの一例を挙げると、たとえば或るアプリケーションが、ウェブサービス(例えば不動産価格データベース)を利用可能なサーバに、検索条件パラメータを入れたSOAPリクエストを送ったとする。すると、そのサーバーはSOAPレスポンス(価格、場所、特徴などの検索結果データを書き込んだXML形式文書)を返してくる。返ってきたデータは標準化された機械処理可能な書式で来るので、それを受け取ったアプリケーションはそのデータを直接処理できる。
SOAPアーキテクチャには、次の幾つかレイヤーのための仕様がある:
- メッセージ形式
- メッセージ交換パターン(Message Exchange Pattern : MEP)
- 下層のトランスポートプロトコルとの結合
- メッセージ処理モデル
- プロトコル拡張性
仕様
SOAPはW3Cにより標準化されている。以下は具体的な仕様である。
SOAP processing model
SOAP processing model はSOAPが採用する分散型メッセージ処理モデルである。
分散コンピューティングを指向するSOAPでは「ネットワーク上に存在するノードがメッセージを送り合いながら処理をおこない最終結果を得る」という処理モデルを取っている[3]。これが SOAP processing model である。
SOAP message
SOAP message はノード間の情報伝達における基本単位である[4]。SOAP message はドキュメント直下に<Envelope>
要素を持ち[5]、その下に<Header>
要素と<Body>
要素が配置される(図参照)[6]。
<Header>
要素は0個以上の header block からなる[7]。各header blockは名前付き要素であり、属性をもつ。仕様では encodingStyle
/ role
/ mustUnderstand
/ relay
の4属性が定義されている[8]。block の role
属性はノードの role と結びついており、その header block がノードをターゲットとすると呼ばれる。
<Body>
要素のコンテンツは要素ツリーであり、その具体的中身(利用可能な要素、木構造)は各サービスで定義される。
SOAP Node
SOAP Node はメッセージ処理を担うノードである。
processing model における出発ノードを initial SOAP sender、中間ノードを SOAP intermediary、終着ノードを ultimate SOAP receiver という[9]。各ノードが担う役割を SOAP roles という。仕様では next
/ none
/ ultimateReceiver
の3つの role name を定める。終着ノードはメッセージのbodyを処理する責務を負う[10]。中間ノードはそのroleに基づき header block の処理を担う。
その他
- SOAP extensibility model :SOAP機能とSOAPモジュールの概念を定義する
- SOAP underlying protocol binding :SOAPノード間でSOAPメッセージを交換するために用いる下層プロトコルへの結合を定義するための規約を示したフレームワーク。
SOAPメッセージの例
一例として、あるクライアントが、ショッピングサイト(例示のための架空のものである)のサービスに商品IDを提示して商品の詳細を求めるリクエストメッセージはおおよそ以下のようになる。
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body>
<getProductDetails xmlns="http://warehouse.example.com/ws">
<productId>827635</productId>
</getProductDetails>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
これに対し、ショッピングサイトのサービス側の、要求に基づく商品データを含むレスポンスメッセージはおおよそ以下のようになる。
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body>
<getProductDetailsResponse xmlns="http://warehouse.example.com/ws">
<getProductDetailsResult>
<productName>Toptimate 3-Piece Set</productName>
<productId>827635</productId>
<description>3-Piece luggage set. Black Polyester.</description>
<price>100.50</price>
<inStock>true</inStock>
</getProductDetailsResult>
</getProductDetailsResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
関連項目
外部リンク
- SOAP Version 1.2 (W3C)
脚注
- ^ 「In previous versions of this specification the SOAP name was an acronym. This is no longer the case.」(SOAP Version 1.2 Part 1 : Messaging Framework (Second Edition)より引用)。
- ^ Hirsch, Frederick; Kemp, John; Ilkka, Jani (2007-01-11). Mobile Web Services: Architecture and Implementation. John Wiley & Sons (2007発行). p. 27. ISBN 9780470032596 2014年9月15日閲覧. "Simple Object Access Protocol (SOAP) はメッセージの小包の構造を定義している。小包は、アプリケーション用の荷物(メッセージ・ボディ)と、管理情報(メッセージ・ヘッダ)の二つの部分で構成される。"
- ^ "SOAP provides a distributed processing model that assumes a SOAP message originates at an initial SOAP sender and is sent to an ultimate SOAP receiver via zero or more SOAP intermediaries. ... A SOAP node receiving a SOAP message MUST perform processing according to the SOAP processing model" W3C. SOAP 1.2 specification.
- ^ "SOAP message The basic unit of communication between SOAP nodes." W3C. SOAP 1.2 specification.
- ^ "A SOAP message Infoset consists of a document information item with exactly one member in its [children] property, which MUST be the SOAP
Envelope
element information item" W3C. SOAP 1.2 specification. - ^ "One or two element information items in its [children] property in order as follows: 1. An optional
Header
element ... 2. A mandatoryBody
element" W3C. SOAP 1.2 specification. - ^ "SOAP header A collection of zero or more SOAP header blocks" W3C. SOAP 1.2 specification.
- ^ "MAY have zero or more attribute information items in its [attributes] property ... which have special significance for SOAP processing: encodingStyle ... role ... mustUnderstand ... relay" W3C. SOAP 1.2 specification.
- ^ "A SOAP node can be the initial SOAP sender, an ultimate SOAP receiver, or a SOAP intermediary." W3C. SOAP 1.2 specification.
- ^ "An ultimate SOAP receiver MUST correctly process the immediate children of the SOAP body" W3C. SOAP 1.2 specification.
SOAP
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2018/03/07 09:05 UTC 版)
「Apache XML」の記事における「SOAP」の解説
SOAP の古い実装。IBMから寄贈されたSOAP4Jという実装がもとになっている。これからSOAPを使うプロジェクトを始める場合には、このSOAP実装を使うことは望ましくない。前述のAxisを使うことが望ましい。
※この「SOAP」の解説は、「Apache XML」の解説の一部です。
「SOAP」を含む「Apache XML」の記事については、「Apache XML」の概要を参照ください。
- Soapのページへのリンク