SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

AJAXでPHP Webサービスを利用する

NuSOAPライブラリ、AJAX技術、SOAPプロトコルの使用法

  • X ポスト
  • このエントリーをはてなブックマークに追加

Webサービスを確認する

 NuSOAPの優れた点の1つとして、Webサービスの存在を確認できることと、クライアントを構築しなくても必要なメソッドを確実に公開できることが挙げられます。例えば、サーバのURLにアクセスすると、先ほど作成したWebサービスのWebサービスWSDLと(WSDLを明示的に記述または生成しなくても、このWSDLは存在します)、サービスメソッドの詳細を確認できます。各メソッドの詳細では、適切なWebサービスクライアントを記述するために必要となる情報を見ることができます。図1に、サンプルWebサービス(nusoap_server.php)のWSDLとメソッドに関する画面キャプチャを示します。

図1 Webサービスの確認:WebサービスのURLにアクセスすると、WSDLファイルとサービスメソッドの詳細が見られる
図1 Webサービスの確認:WebサービスのURLにアクセスすると、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フォルダに保存してください)。

リスト2 Webサービスクライアント
<?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のようになるはずです。

図2 Webサービスクライアント:nusoap_client.phpクライアントページを見ると、そのページから呼び出されたTriangleAreaおよびRectangleAreaの呼び出しと、要求/応答の詳細が表示される
図2 Webサービスクライアント:nusoap_client.phpクライアントページを見ると、そのページから呼び出されたTriangleAreaおよびRectangleAreaの呼び出しと、要求/応答の詳細が表示される

 ここまでの段階で、Webサービスを構築し、メソッドを公開し、PHPコードを使用してサーバ上で利用することができました。次の節では、JavaScript/AJAXクライアントからWebサービスを利用する方法について説明します。

次のページ
JavaScript Webサービスクライアントを記述する

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Octavia Andreea Anghel(Octavia Andreea Anghel)

経験豊富なPHP開発者。現在は、国内外のソフトウェア開発コンテストに参加するプログラミングチームの主任トレーナーを務める。国レベルの教育プロジェクト開発のコンサルティングも担当している。共著書に『XML technologies?XML in Java』があり、XML部分の執筆を担当。PHPやXML...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/3939 2009/05/29 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング