オルタナティブ・ブログ > Randomwalk >

予測できないITの行く先を、あちこち歩きながら考えてみます

AjaxとRESTのパラドックスからWeb2.0を考える

»

Ajaxについていろんな話を調べたり聞いた中でも、興味深かったのはRESTとの関係でした。簡単にいえば、AjaxとRESTは両方ともWeb2.0の構成要素として挙げられていながら、実は相反したものである、というパラドックス的な関係です。

RESTとは「REpresentational State Transfer」の略で、詳しくは@ITの記事「Webの「正しい」アーキテクチャ」記事を読んでいただいたり、さらに詳しくは山本陽平氏の「REST入門」あたりをぜひ読んでいただきたいのですが、ひとまずRESTをものすごく乱暴に書いてしまうと、“Webアプリケーションであれば、状態やリソースごとに異なるURLを持とう”といったアーキテクチャのことだと私は考えています。

例えば、“住所を入力する”ためのWebアプリケーションがあったとしたら、入力画面→確認画面→確定画面という画面遷移が考えられます。この遷移ごとに異なるURLを持つように画面を切り替えて作るのがREST的には“行儀がいい”Webアプリケーションです。

Web2.0的なアプリケーションはREST的に行儀のいいアプリケーションが望ましい、と考える人が多くいます。

一方で、この住所入力画面をAjaxで作るとどうなるでしょう? たぶん、固定されたURLを持つ1枚の画面を、入力→確認→確定と、スムーズにJavaScriptで書き換えていくような実装になりますよね。これは状態が変わってもURLが固定なので、REST的に見ると“全くなってない”アプリケーションといえます。

Web2.0的なアプリケーションはAjaxを使ってユーザービリティを高めることが望ましい、と考える人が多くいます。

冒頭ではAjaxとRESTは“相反するものである”と言い切ってしまっていますが、それは実は実装次第であって、Ajaxでも実装によってREST的に作ることはできます(Google Mapsが任意のポイントをURLで表現できるように)。ですからAjaxとRESTがつねに矛盾したものだ、とは言い切れません。

とはいえ、やはり直感的には“状態が変わるごとにURIをつけよう”というするRESTと、“1つの画面をダイナミックに書き換えよう”とするAjaxが両方ともWeb2.0の要素として並んでいるのは、パラドックスのように見えても仕方のないところかと思います。

もちろん、こうした相反する2つの要素を「どうしたもんかいな」と考える人もいて、2004年12月に行われた「XML開発者の日」でも、AjaxとRESTに関するセッションがありました。が、残念ながら私はその時間に仕事が入っていたために泣く泣く会場をあとにしました。ものすごく残念です。あとから資料だけ拝見しました(「サーバ側RESTとクライアント側RESTに分けて考えるべきではないか」という提案がありました。なるほど)。

さて、ここでは「RESTとAjaxは矛盾している、変だ」ということをことさら取り上げるのが目的ではありません。なぜ、Web2.0はこういう矛盾するような要素を含んでいるのでしょう? と疑問に思ったことを取り上げたかったのです。

というところで、今日は時間切れ(眠いです...)になってしまったので、続きはまた次回。

ところで、全然関係ないですが自分のためにメモしておくと、XML開発者の日に個人的にいちばん「なるほど」と思ったのは、ステートレスはスケーラビリティ実現の重要なカギだった、ということです。メモメモ。

Comment(8)