Webサービスを確認する
NuSOAPの優れた点の1つとして、Webサービスの存在を確認できることと、クライアントを構築しなくても必要なメソッドを確実に公開できることが挙げられます。例えば、サーバのURLにアクセスすると、先ほど作成したWebサービスのWebサービスWSDLと(WSDLを明示的に記述または生成しなくても、このWSDLは存在します)、サービスメソッドの詳細を確認できます。各メソッドの詳細では、適切なWebサービスクライアントを記述するために必要となる情報を見ることができます。図1に、サンプルWebサービス(nusoap_server.php)のWSDLとメソッドに関する画面キャプチャを示します。
Webサービスクライアントを記述する
サーバを作成して確認したら、次はNuSOAP Webサービスクライアントを作成します。以降の説明を読めば分かるように、これはサーバを作成するよりも単純な作業です。手順は次のとおりです。
1、soapclientNusoapクラスをインスタンス化
まず、soapclientNusoap
クラスをインスタンス化してクライアントインスタンスを作成します。このとき、通常はWSDLのURLと、WSDLファイルを使用することを示すブール値をクラスコンストラクタに渡します(NuSOAPでは、WSDLがなくてもWebサービスを作成できますが、これについては、ここでは論じません)。
// Create the client instance $client = new soapclientNusoap( 'http://localhost/php/webservice/nusoap_server.php?wsdl', true);
2、エラーチェック
この時点でエラーをチェックすると良いでしょう。例えば、次のようにします。
// Check for an error $err = $client->getError(); if ($err) { // Display the error echo '<h2>Constructor error</h2><pre>' .$err .'</pre>'; // At this point, you know any calls to // this web service's methods will fail }
3、Webサービスメソッドの呼び出し
最後に、NuSOAPのcall
メソッドを使用して、Webサービスメソッドを呼び出します。次の例では、TriangleArea
およびRectangleArea
メソッドを呼び出しています(潜在的なエラーもチェックしていることに留意してください)。
// Call the TriangleArea SOAP method $result = $client->call('TriangleArea', array('b' => 10, 'h' => 15)); // Check for a fault if ($client->fault) { echo '<h2>Fault</h2><pre>'; print_r($result); echo '</pre>'; } else { // Check for errors $err = $client->getError(); if ($err) { // Display the error echo '<h2>Error</h2><pre>' .$err .'</pre>'; } else { // Display the result echo '<h2>Result</h2><pre>'; print_r($result); echo '</pre>'; } } // Call the RectangleArea SOAP method $result = $client->call('RectangleArea', array('L' => 40, 'l' => 20)); // Check for a fault if ($client->fault) { echo '<h2>Fault</h2><pre>'; print_r($result); echo '</pre>'; } else { // Check for errors $err = $client->getError(); if ($err) { // Display the error echo '<h2>Error</h2><pre>' .$err .'</pre>'; } else { // Display the result echo '<h2>Result</h2><pre>'; print_r($result); echo '</pre>'; } }
4、要求/応答の表示
必要であれば、次のようにして要求/応答を表示することもできます。
// Display the request and response echo '<h2>Request</h2>'; echo '<pre>' . htmlspecialchars($client->request, ENT_QUOTES) .'</pre>'; echo '<h2>Response</h2>'; echo '<pre>' . htmlspecialchars($client->response, ENT_QUOTES) .'</pre>';
この4つのステップを経て作成したWebサービスクライアントをリスト2に示します(リスト2のコードを、webserviceフォルダに保存してください)。
<?php // Pull in the NuSOAP code require_once('./nusoap-php5-0.9/lib/nusoap.php'); // Create the client instance $client = new soapclientNusoap('http://localhost/php/webservice/nusoap_server.php?wsdl', true); // Check for an error $err = $client->getError(); if ($err) { // Display the error echo '<h2>Constructor error</h2><pre>' . $err . '</pre>'; // At this point, you know the call that follows will fail } // Call the TriangleArea SOAP method $result = $client->call('TriangleArea', array('b' => 10, 'h' => 15)); // Check for a fault if ($client->fault) { echo '<h2>Fault</h2><pre>'; print_r($result); echo '</pre>'; } else { // Check for errors $err = $client->getError(); if ($err) { // Display the error echo '<h2>Error</h2><pre>' . $err . '</pre>'; } else { // Display the result echo '<h2>Result</h2><pre>'; print_r($result); echo '</pre>'; } } // Call the RectangleArea SOAP method $result = $client->call('RectangleArea', array('L' => 40, 'l' => 20)); // Check for a fault if ($client->fault) { echo '<h2>Fault</h2><pre>'; print_r($result); echo '</pre>'; } else { // Check for errors $err = $client->getError(); if ($err) { // Display the error echo '<h2>Error</h2><pre>' . $err . '</pre>'; } else { // Display the result echo '<h2>Result</h2><pre>'; print_r($result); echo '</pre>'; } } // Display the request and response echo '<h2>Request</h2>'; echo '<pre>' . htmlspecialchars($client->request, ENT_QUOTES) . '</pre>'; echo '<h2>Response</h2>'; echo '<pre>' . htmlspecialchars($client->response, ENT_QUOTES) . '</pre>'; ?>
では、初めて作成したNuSOAP Webサービスをテストしてみましょう。ブラウザを使ってサーバのURLにアクセスしてください。出力結果は図2のようになるはずです。
ここまでの段階で、Webサービスを構築し、メソッドを公開し、PHPコードを使用してサーバ上で利用することができました。次の節では、JavaScript/AJAXクライアントからWebサービスを利用する方法について説明します。