TOP書籍連動> アプリケーションの書き方
SOAPの紹介
SOAPの紹介

第3回:アプリケーションの書き方

著者:Alessandro Sfondrini   2006/3/15
1   2  次のページ
アプリケーションの書き方

   今回、著者たちが作成するアプリケーションは2つのリストから構成されます。"client.php"(リスト2)は、リモートアプリケーションにリクエストを送り、そのレスポンスを取得するように設計されています。
リスト2
<?php
/* クライアントファイル */

require("nusoap.php");
$s = new soapclient("http://host/server.php");
    /* クライアントオブジェクトを作成 */

$params = array('tid'=>4636, // トランザクションID
                'cid'=>1059);// 顧客ID

$res = $s -> call('get_transaction', $params);
    /* リモートメソッドの呼び出し */

if(isset($fault)) // もしfaultが起きた場合
  die($fault);  // それを表示し終了

if($params['tid'] != $res['tid'])
  die('トランザクションIDが一致しません');
if($params['cid'] != $res['cid'])
  die('顧客IDが一致しません');
    /* tid と cid のチェック */

echo '量 '.$res['amount'].' ステータス '.$res['status'];
?>

   一方、server.php(リスト3)ではリクエストを受信し、処理した後に、レスポンスを送信する出力を生成します。SOAP は、連続した文字列と変数による単純なリクエストを「手動で」書くことができます。

リスト3
<?php
/* SERVER FILE */

if($_SERVER["REQUEST_METHOD"] != "POST")
    exit; // メソッドがPOSTかどうかリクエストをチェック

require("nusoap.php");
$s = new soap_server;
    /* サーバオブジェクトを作成 */

$s -> register('get_transaction');
    /* メソッドを登録 */

function get_transaction($tid, $cid)
  {
    if(!is_int($tid) || !is_int($cid))
      return new soap_fault("Sender","Input err",
        "ID type must be INTEGER"); // データタイプ fault

    $q = "SELECT tid,cid,amount,status FROM transactions"
      ." WHERE tid = $tid AND cid = $cid"; // MySQLクエリ

    if(($conn = @mysql_connect()) === FALSE)
      return new soap_fault("Receiver", "MySQL",
          mysql_error()); // MySQL接続. fault

    if((@mysql_select_db("liceogiovio_", $conn)) === FALSE)
      return new soap_fault("Receiver", "MySQL",
          mysql_error()); // MySQLのデータベース選択 fault

    $res = @mysql_query($q, $conn);
    if(mysql_num_rows($res) != 1)
      return new soap_fault("Sender", "Bad IDs",
        "No record matches the IDs"); // 結果がない場合

    $resp = @mysql_fetch_array($res, MYSQL_ASSOC);
    @mysql_close($conn);
    $resp["time"] = time(); // time()の値を追加
    return $resp; // 結果を返す
  }

$s -> service($HTTP_RAW_POST_DATA); // RPCを実行
?>


XMLドキュメントを解析しなければならない時の問題

   しかし、XMLドキュメントを解析しなければならない時に問題が生じます。解析するために作成されたPHP関数も存在しますが、長く複雑なメッセージを受け取る場合は、解析するアプリケーションは非常に複雑なものとなります。

   幸いなことに、厄介な部分を処理してくれるオープンソースのライブラリがあります。これを利用することで、例えばWebサービスの最も重要なものであるセキュリティ部分など、アプリケーションの他の部分に時間を使えるようになります。

   もちろん、コードがどのように動作するか、どうしたら最適化できるかを十分理解しているのであれば、自分自身でコードを書くのも最良な方法といえるかもしれません。

   しかし、この作業には膨大な時間がかかる上、アプリケーションに何らかのエラーを発生させることになるかもしれません。

   オープンソースのライブラリを利用すべきか、自分自身でコードを書くべきかは、個々の特別な事情や時間的な制約から判断するとよいでしょう。この記事では作業を簡略化するために、オープンソースのPHPライブラリであるNuSOAPを使用することにします。

1   2  次のページ

PHPプログラマーズマガジン 書籍紹介
PHPプログラマーズマガジン

PHPプログラマーズマガジンは、PDF形式で読者の方にお届けするPHP言語(PHP: Hypertext Processor)専門誌です。 カナダMTA出版のphp|architect誌を日本語に翻訳し、独自の記事を加えて月刊でお届けしています。

発行:アシアル株式会社  価格:1,029円

 ご購入はこちら
http://www.asial.co.jp/magazine/
Alessandro Sfondrini
著者プロフィール
Alessandro Sfondrini
イタリアのコモ出身の若いプログラマであり、PHPとC言語に関連したWebサービスに興味をもっています。また、近日出版される『php|a Nanobook"Practical Web Services"』の著者です。


INDEX
第3回:アプリケーションの書き方
  アプリケーションの書き方
  PHP NuSOAPライブラリ