Ajaxのサーバーサイド・プログラムはWebサービスである。AjaxではWebサービスを頻繁に呼び出すので,やり取りするデータ形式によっては性能が低下する。そこでXMLより簡易な形式が使われることが多い。また,作成したWebサービスは想定外の使われ方をされる恐れがある。転用を難しくすることで,想定した使い方のみになるようにしたい。
一般的なWebアプリケーションは利用者の操作を契機にサーバーと通信を開始するが,AjaxはJavaScriptの指示でサーバー側のプログラムを呼び出す(図1)。ページの部分的な変更が可能で,マウスの移動などを契機にプログラムを動作できる。これらにより,Ajaxでは操作性を向上させたり性能を向上させたりすることが可能になる。これがPart1で説明したAjaxの特徴だ。
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形式になるので,適時パース(解析)処理が必要になる。