PR

Webアプリケーションに依存させる

 インターネットに公開しているWebサービスの場合,そのWebサービスが返すデータをほかの用途に転用される危険性は常にある。Webサービスの返すデータがWebアプリケーション特有のデータで,ほかに転用してもメリットがないならまずそのような心配はいらないだろう。だが証券コードから株価を返すサービスのように,汎用的に使えるデータを提供する場合には転用される可能性が高くなる。

 Ajaxでは実行コードがクライアント側のJavaScriptに実装されるという構成上,解析されないようにするのは不可能であり,他用途への流用を完全に避けることはできない。ただ,完全に回避することはできないが,データを暗号化したり,アプリケーションの構成を複雑にしたりしておけば転用が難しくなる。

 複雑にする方法の一つとして,WebアプリケーションとWebサービスが連動して動くような構成が考えられる。例えば証券コードをWebサービスの引数に渡すのではなく,Webアプリケーションのフォームで入力し,それをセッション領域に保存してWebサービス側で取得するという方法である図6)。

図6●Webアプリケーションに依存したWebサービスにすることで転用を難しくする<br>Webサービスの引数に相当する情報を,セッション領域を使って受け渡しする。こうすることで,クライアント・プログラムの転用による想定外の呼び出しを防ぐ
図6●Webアプリケーションに依存したWebサービスにすることで転用を難しくする
Webサービスの引数に相当する情報を,セッション領域を使って受け渡しする。こうすることで,クライアント・プログラムの転用による想定外の呼び出しを防ぐ
[画像のクリックで拡大表示]

 こうすることで,Webアプリケーションと連動しない呼び出しは,想定外の使われ方と判断できるようになる。もしこうした構成で想定外の使われ方をされたとしても,入力フォームのフィールド名やそれに結びついたサーバー・プログラムのフォーム処理を変更すれば,想定外のプログラムによる利用を排除できる。

 通常のWebサービスは“単体で動くこと”を目的に作るが,Ajaxで使うWebサービスの場合には,あえて“Webアプリケーションと連動しないと動かない”ように作る。Webアプリケーションとの依存性を高めることは,他用途への流用を防ぐ効果がある。

開発にはライブラリやフレームワークを使う

 Part1とPart2に分けてAjaxアプリケーションを説明した。これまでの説明から分かるように,AjaxアプリケーションはJavaScriptを使ってWebサービスを呼び出すものにすぎず,構造は簡単である。しかし構造が簡単だからといって,Ajaxアプリケーションを作るのが簡単だとは言えない。問題を複雑化させているのは,JavaScriptである。JavaScriptの挙動はWebブラウザによって異なり,その挙動の差を吸収するのが難しい。

 そこで重要なのが,Ajaxアプリケーション開発を支援するためのライブラリやフレームワークの利用である。ライブラリやフレームワークは,アプリケーションの構築を容易にするだけではない。今後新しくWebブラウザが登場したときにも,ライブラリやフレームワークを使っておけば,それを差し替えるだけで動く可能性が高くなり,メンテナンス性に優れる。

 Ajaxにおいて,定番とも言えるライブラリが,「prototype.js」だ。

 prototype.jsは,XMLHttpRequestオブジェクトの生成,そして,そのオブジェクトを使ったデータの送受信から,簡易なDOM操作を提供するヘルパ関数まで,Ajaxアプリケーションで必要となる基本的な機能を提供しており,開発効率を向上させる。

 またAjaxを使って,魅力的なUIを提供するためのライブラリもある。代表的なものは,「script.aculo.us」だ。このライブラリを使うと,要素をマウスでドラッグ&ドロップして動かしたり,要素を表示するときにフェードインやフォードアウトの効果を出したりすることができる。

 近年では,Ajaxが流行しているということから,インターネットサービス業者もAjaxライブラリを提供する動きがある。

 ヤフーやグーグルなどは,Ajaxを使ったサービスをユーザーに提供しているだけでなく,開発者向けのライブラリも提供している。 たとえばヤフーでは,Yahoo! UIライブラリというUIライブラリを提供している。また,グーグルは,JavaでAjaxアプリケーションを開発する「Google Web Toolkit(GWT)」というライブラリを提供している。

 さらには統合開発環境でも,Ajaxライブラリを提供する動きがある。たとえば,マイクロソフト社は,ASP.NET AJAX(開発コード名Atlas)というフレームワークを開発中だ。このフレームワークを使うと,クライアント/サーバー間のAjaxを用いた通信を隠蔽することができるため,開発者が通信のための細かいJavaScriptのコードを書かなくても済む