Zend_Soap_Server(日本語)
Zend_Soap_Serverクラスは、
ウェブ・サービス部分の開発をPHPプログラマーにとって簡単にすることを目的としています。
それは、ウェブサービスAPIを定義するクラスまたは機能を使って、
WSDLモードまたは非WSDLモードで使われるかもしれません。
Zend_Soap_ServerコンポーネントがWSDLモードで動くとき、
サーバオブジェクトの挙動とトランスポート層オプションを定義する
すでに用意されたWSDLドキュメントを使います。
WSDLドキュメントは
Zend_Soap_AutoDiscoveryコンポーネント
によって提供される機能によって自動的に生成されるか、
または、Zend_Soap_Wsdlクラスや、
その他のXML生成ツールを使って、
手動で構成されます。
非WSDLモードが使われるならば、
すべてのプロトコル・オプションはオプション・メカニズムを用いて設定されなければなりません。
Zend_Soap_Serverコンストラクタ
Zend_Soap_Serverコンストラクタは、
WSDLモードと非WSDLモードとでは少し使い方が違います。
WSDLモードのためのZend_Soap_Serverコンストラクタ
WSDLモードで動作する場合、Zend_Soap_Serverコンストラクタは2つの引数を受け取ります:
$wsdl WSDLファイルのURI
あとでsetWsdl($wsdl)メソッドを使って
設定されるかもしれません。
$options - SOAPサーバオブジェクトを作成するためのオプション
オプションは後でsetOptions($options)を使って
設定されるかもしれません。
WSDLモードでは下記のオプションが許されています:
'soap_version' ('soapVersion') - 使用するSOAPバージョン (SOAP_1_1 または SOAP_1_2)
'actor' - サーバのためのアクターURI。
'classmap' ('classMap') -
一部の WSDL 型をPHPクラスにマップするために使います。
このオプションは、キーとしてWSDL型、値としてPHPクラス名をもつ配列でなければなりません。
'encoding' - 内部文字エンコーディング。 (対外的なエンコーディングとしてUTF-8が常に使われます)
'wsdl' setWsdl($wsdlValue)呼び出しと同じです。
非WSDLモードのためのZend_Soap_Serverコンストラクタ
非WSDLモードでZend_Soap_Server機能を使うつもりなら、
最初のコンストラクタ・パラメータはNULLに設定しなければなりません。
この場合、'uri' オプションを設定しなければなりません。(下記参照)
2番目のコンストラクタ・パラメータ ($options) は、
SOAPサーバオブジェクトを作成するためのオプション配列です
オプションは後でsetOptions($options)メソッドを使って
設定されるかもしれません。
非WSDLモードでは下記のオプションが許されています:
'soap_version' ('soapVersion') - 使用するSOAPバージョン (SOAP_1_1 または SOAP_1_2)
'actor' - サーバのためのアクターURI。
'classmap' ('classMap') -
一部の WSDL 型をPHPクラスにマップするために使います。
このオプションは、キーとしてWSDL型、値としてPHPクラス名をもつ配列でなければなりません。
'encoding' - 内部文字エンコーディング。 (対外的なエンコーディングとしてUTF-8が常に使われます)
'uri' (必須) - SOAPサーバのためのURIネームスペース
ウェブ・サービスAPIを定義するメソッド
SOAPを通してPHPコードにアクセスすることを許可したいときに、
ウェブサービスAPIを定義する2つの方法があります。
最初の一つは、ウェブサービスAPIを完全に記述しなければならないZend_Soap_Serverオブジェクトに対して、
いくつかのクラスを付与することです:
setClass('MyClass');
// 初期化済みのオブジェクトをSOAPサーバにバインド
$server->setObject(new MyClass());
...
$server->handle();
]]>
重要
対応するウェブサービスWSDLを準備するautodiscover機能を使うつもりならば、
メソッドdocblockを使って各々のメソッドを完全に記述しなければなりません。
ウェブサービスAPIを定義する2つ目の方法は、
関数のセットやaddFunction()またはloadFunctions()メソッドを使うことです:
addFunction('function1');
$server->addFunction('function2');
...
$server->handle();
]]>
リクエストおよびレスポンスオブジェクトの操作
高度な利用
このセクションではリクエスト/レスポンス処理の高度なオプションを説明します。
スキップされるかもしれません。
Zend_Soap_Serverコンポーネントは自動的にリクエスト/レスポンス処理を実行します。
しかし、その処理を捕まえて何らかの事前もしくは事後の処理をさせることもできます。
リクエスト処理
Zend_Soap_Server::handle()メソッドは、
標準的な入力ストリーム ('php://input') からリクエストを取得します。
それは、handle()メソッドにオプションのパラメータを供給することによって、
または、setRequest()メソッドを用いてリクエストを設定することによって
上書きされるかもしれません:
handle($request);
...
// setRequest() メソッドを使ってリクエストを設定
$server->setRequest();
$server->handle();
]]>
リクエストオブジェクトは以下のどれかを用いて表されるかもしれません:
DOMDocument (XMLにキャストされます)
DOMNode (
所有者のドキュメントは横取りされてXMLにキャストされます)
SimpleXMLElement (XMLにキャストされます)
stdClass (__toString() が呼び出されて、有効なXMLであることが確かめられます)
string (有効なXMLであることが確かめられます)
最後に処理されたリクエストはgetLastRequest()メソッドを使ってXML文字列として取得されます:
handle();
$request = $server->getLastRequest();
]]>
レスポンスの事前処理
Zend_Soap_Server::handle()メソッドは、出力ストリームに生成されたレスポンスを自動的に送ります。
それはsetReturnResponse()にパラメータとして
TRUEまたはFALSEを与えてブロックできます。
戻るレスポンスフラグの現在の状態は
setReturnResponse() メソッドによりリクエストされます。
生成されたレスポンスはこの場合、handle()メソッドにより戻されます。
setReturnResponse(true);
...
$response = $server->handle();
...
]]>
ある処理のために、最後のレスポンスをgetLastResponse()メソッドで取得することもできます:
handle();
$response = $server->getLastResponse();
...
]]>