Ajaxのサーバーサイド・プログラムはWebサービスである。AjaxではWebサービスを頻繁に呼び出すので,やり取りするデータ形式によっては性能が低下する。そこでXMLより簡易な形式が使われることが多い。また,作成したWebサービスは想定外の使われ方をされる恐れがある。転用を難しくすることで,想定した使い方のみになるようにしたい。

 一般的なWebアプリケーションは利用者の操作を契機にサーバーと通信を開始するが,AjaxはJavaScriptの指示でサーバー側のプログラムを呼び出す(図1)。ページの部分的な変更が可能で,マウスの移動などを契機にプログラムを動作できる。これらにより,Ajaxでは操作性を向上させたり性能を向上させたりすることが可能になる。これがPart1で説明したAjaxの特徴だ。

図1●Ajaxの基本的な動き<br>Ajaxアプリケーションは,WebブラウザではなくJavaScriptがWebサーバーへの接続を指示する。送受信されるデータ形式は,HTMLではなくXMLまたはテキスト形式。呼び出されるサーバー側プログラムは,Webサービスになる
図1●Ajaxの基本的な動き
Ajaxアプリケーションは,WebブラウザではなくJavaScriptがWebサーバーへの接続を指示する。送受信されるデータ形式は,HTMLではなくXMLまたはテキスト形式。呼び出されるサーバー側プログラムは,Webサービスになる
[画像のクリックで拡大表示]

 Part2では,Ajaxアプリケーションを開発する際の注意点,特にサーバー側のWebサービスにまつわる注意点を取り上げる。

●サーバーとの通信データ
性能重視ならXMLは使わない

 Ajaxのサーバー側プログラムであるWebサービスは,Ajaxクライアントによって何度も呼び出される可能性がある。例えばマウスの動きによって何か処理するのであれば,マウスが動くたびに呼び出される。つまり,Ajaxアプリケーションの処理性能はWebサービスとの通信処理に依存することになる。処理性能を左右するポイントは,通信データ形式にある。

SOAPより軽量なXMLRPC

 一般にWebサービスと言えば,XML形式でデータをやり取りするのが基本である。Webサービスと言えばすぐに思い浮かぶのが「SOAP」だ。しかしSOAPは,SOAPエンベロープ(ヘッダーなどを含むフォーマット)を付けて送受信する必要があり,やや冗長なプロトコルである。AjaxでSOAPを扱うことは可能だが,JavaScriptでSOAPを使おうとすると,開発者がSOAPエンベロープなどの要素を作成する必要があり,プログラムが複雑になる。そのため,Ajaxでの通信にSOAPが使われることはほとんどない

 SOAPより少し軽量なプロトコルとして「XMLRPC」がある。XMLRPCは,引数や戻り値を,型に応じた簡単なタグでくくって呼び出す方式である。ブログの実装などでよく使われており,ライブラリも充実している。AjaxでXMLRPCのWebサービスを呼び出すには,文字列結合やDOMDocumentオブジェクト(XMLのオブジェクト形式)を使って,引数をXML形式で作成する。その引数をXMLHttpRequestオブジェクトのsendメソッドの引数として指定すれば,サーバー側のプログラムが呼び出される(図2)。サーバー側からの戻り値はXML形式になるので,適時パース(解析)処理が必要になる

図2●XMLRPCでWebサービスを呼び出す場合の例<br>クライアントとサーバー間のやり取りはXML形式のデータになる。サービスを呼び出すには,XML形式の引数を作成する必要がある。Webサービスの戻り値から利用者に表示する値などを取得するには,XML形式のデータをパースする必要がある
図2●XMLRPCでWebサービスを呼び出す場合の例
クライアントとサーバー間のやり取りはXML形式のデータになる。サービスを呼び出すには,XML形式の引数を作成する必要がある。Webサービスの戻り値から利用者に表示する値などを取得するには,XML形式のデータをパースする必要がある
[画像のクリックで拡大表示]