Zend_Soap_Serverクラスは、
ウェブ・サービス部分の開発をPHPプログラマーにとって簡単にすることを目的としています。
それは、ウェブサービスAPIを定義するクラスまたは機能を使って、 WSDLモードまたは非WSDLモードで使われるかもしれません。
Zend_Soap_ServerコンポーネントがWSDLモードで動くとき、
サーバオブジェクトの挙動とトランスポート層オプションを定義する
すでに用意されたWSDLドキュメントを使います。
WSDLドキュメントは
Zend_Soap_AutoDiscoveryコンポーネント
によって提供される機能によって自動的に生成されるか、
または、Zend_Soap_Wsdlクラスや、
その他のXML生成ツールを使って、
手動で構成されます。
非WSDLモードが使われるならば、 すべてのプロトコル・オプションはオプション・メカニズムを用いて設定されなければなりません。
Zend_Soap_Serverコンストラクタは、
WSDLモードと非WSDLモードとでは少し使い方が違います。
WSDLモードで動作する場合、Zend_Soap_Serverコンストラクタは2つの引数を受け取ります:
-
$wsdlWSDLファイルのURI [22] -
$options- SOAPサーバオブジェクトを作成するためのオプション [23]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機能を使うつもりなら、
最初のコンストラクタ・パラメータはNULLに設定しなければなりません。
この場合、'uri' オプションを設定しなければなりません。(下記参照)
2番目のコンストラクタ・パラメータ ($options) は、
SOAPサーバオブジェクトを作成するためのオプション配列です
[24]
非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ネームスペース
SOAPを通してPHPコードにアクセスすることを許可したいときに、 ウェブサービスAPIを定義する2つの方法があります。
最初の一つは、ウェブサービスAPIを完全に記述しなければならないZend_Soap_Serverオブジェクトに対して、
いくつかのクラスを付与することです:
...
class MyClass {
/**
* このメソッドは ...
*
* @param integer $inputParam
* @return string
*/
public function method1($inputParam) {
...
}
/**
* このメソッドは ...
*
* @param integer $inputParam1
* @param string $inputParam2
* @return float
*/
public function method2($inputParam1, $inputParam2) {
...
}
...
}
...
$server = new Zend_Soap_Server(null, $options);
// クラスをSOAPサーバにバインド
$server->setClass('MyClass');
// 初期化済みのオブジェクトをSOAPサーバにバインド
$server->setObject(new MyClass());
...
$server->handle();
重要
対応するウェブサービスWSDLを準備するautodiscover機能を使うつもりならば、 メソッドdocblockを使って各々のメソッドを完全に記述しなければなりません。
ウェブサービスAPIを定義する2つ目の方法は、
関数のセットやaddFunction()またはloadFunctions()メソッドを使うことです:
...
/**
* この関数は...
*
* @param integer $inputParam
* @return string
*/
function function1($inputParam) {
...
}
/**
* この関数は...
*
* @param integer $inputParam1
* @param string $inputParam2
* @return float
*/
function function2($inputParam1, $inputParam2) {
...
}
...
$server = new Zend_Soap_Server(null, $options);
$server->addFunction('function1');
$server->addFunction('function2');
...
$server->handle();
高度な利用
このセクションではリクエスト/レスポンス処理の高度なオプションを説明します。 スキップされるかもしれません。
Zend_Soap_Serverコンポーネントは自動的にリクエスト/レスポンス処理を実行します。
しかし、その処理を捕まえて何らかの事前もしくは事後の処理をさせることもできます。
Zend_Soap_Server::handle()メソッドは、
標準的な入力ストリーム ('php://input') からリクエストを取得します。
それは、handle()メソッドにオプションのパラメータを供給することによって、
または、setRequest()メソッドを用いてリクエストを設定することによって
上書きされるかもしれません:
... $server = new Zend_Soap_Server(...); ... // オプションの $request パラメータを使ってリクエストを設定 $server->handle($request); ... // setRequest() メソッドを使ってリクエストを設定 $server->setRequest(); $server->handle();
リクエストオブジェクトは以下のどれかを用いて表されるかもしれません:
-
DOMDocument (XMLにキャストされます)
-
DOMNode ( 所有者のドキュメントは横取りされてXMLにキャストされます)
-
SimpleXMLElement (XMLにキャストされます)
-
stdClass (__toString() が呼び出されて、有効なXMLであることが確かめられます)
-
string (有効なXMLであることが確かめられます)
最後に処理されたリクエストはgetLastRequest()メソッドを使ってXML文字列として取得されます:
... $server = new Zend_Soap_Server(...); ... $server->handle(); $request = $server->getLastRequest();
Zend_Soap_Server::handle()メソッドは、出力ストリームに生成されたレスポンスを自動的に送ります。
それはsetReturnResponse()にパラメータとして
TRUEまたはFALSEを与えてブロックできます。
[25]
生成されたレスポンスはこの場合、handle()メソッドにより戻されます。
... $server = new Zend_Soap_Server(...); ... // 標準出力に送る代わりに、 //handle() メソッドの返り値としてレスポンスを取得 $server->setReturnResponse(true); ... $response = $server->handle(); ...
ある処理のために、最後のレスポンスをgetLastResponse()メソッドで取得することもできます:
... $server = new Zend_Soap_Server(...); ... $server->handle(); $response = $server->getLastResponse(); ...