アプリケーションはNuSOAPライブラリをベースとした"client.php"と"server.php"の、2つのPHPファイルから構成されることに注意してください。このWebサービスはとても基本的なものですから、WSDLファイルは使用しません。それでは構造を見ていきましょう。
"client.php"では、リモートメソッドであるget_transaction()にパラメートとしてトランザクションID(tid)と顧客ID(cid)を送信して、トランザクションに関する情報を検索するSOAPメッセージを送信します。
すると、リモートアプリケーションがステータスコード(「OK」、「pending」、「failed」)や、トランザクション量や、2つのID(エラーが生じていないことを確認するためのものです)を返します。さらに、"server.php"は、それらの変数にdate()の現在値を追加します。
"server.php"では、最初にリモートメソッドが正しい方法(例えばPOST経由)で呼び出されたかどうか確認します。次に、要求されたデータがすべて提供されたか確認します。つまり、要求されたデータをデータベース(通常MySQLを使用します)から取得し、それを送り返そうとしています。
リスト4では、使用するテーブルのダンプを検索することができます。
リスト4
# "transactions"のダンプ
CREATE TABLE transactions(
tid INT UNSIGNED NOT NULL AUTO_INCREMENT ,
cid INT UNSIGNED NOT NULL ,
description VARCHAR(30) NOT NULL ,
amount FLOAT(7,2) UNSIGNED NOT NULL ,
STATUS ENUM('pending','failed','OK')
DEFAULT 'pending' NOT NULL ,
PRIMARY KEY (tid)
);
|
リスト2を見てください。最初にNuSOAPをインクルードし、先の例で行ったようにクライアントオブジェクトを作成します。$wsdlブールパラメータがないことに注意してください。
リスト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'];
?>
つまり、FALSEと仮定され、WSDLファイルはこのWebサービスでは利用できません。次に、$params連想配列にリモートアプリケーションの入力データを保存します。これが実際のアプリケーションであれば、入力データは、ユーザによって送信されたフォームから、または$_SESSION配列から、あるいはデータベースから取得されることに注意してください。
よりシンプルなコードにするため、データをどこから取得したかは気にせず、ともかく、この配列にデータが格納されていると仮定しましょう大変な作業はNuSOAPが行ってくれます。
たった1行のコードだけで、リクエストを構築し、送信し、検索し、レスポンスを解析します。素晴らしいことだと思いませんか?
$resに結果が保持された後に、問題が起きていないか確認します(NuSOAPによって作成された$fault 値を解析します)。また、送信したIDと返されたIDとが一致しているかどうか確認します。最後に、結果を表示します。
これは本当に基本的なプログラムです。できるだけ単純なWebサービスのアプリケーションを構築しています。プログラム初心者のために紹介される「Hello World」と表示するコードのようなものです。実用的なサーバファイルを書く場合には、もう少し複雑になります。
|