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開発者の日に個人的にいちばん「なるほど」と思ったのは、ステートレスはスケーラビリティ実現の重要なカギだった、ということです。メモメモ。
Special
- PR -| pass_secret | 2006/01/23 08:42 |
|
いつも楽しく読ませていただいています。 | |
| HN | 2006/01/23 14:19 |
|
Web 2.0 が Java Script 使うこのなのかということっていうのも変だし。Ajax ってのは、別に Java Script を使うことじゃなくて、Java Script を使ってシンプルにデータベースを呼び出せるってことに意義があって。 Java Script 使うのがいいのかどうかは、サービスの性質によって異なるんで、Java Script が期待通りに動くブラウザだけを対象にサービスを行うと決めるならそれでもいいですけど。正直、ホントどうでもいい。 | |
| Shin | 2006/01/23 15:04 |
|
>HNさん どうでもいい、ならこんなところにそんなことを書かなければいいのではないですか? しかもHNなんていうハンドルで(しかもハンドルネーム、だと思っているとか?(^^;;) | |
| jniino | 2006/01/23 15:54 |
|
Shinさん、コメントでのフォローありがとうございます。pass_secretさんもコメントありがとうございます。HNさんも、続きを明日かあさってに書きますので、お待ちください。 | |
| Shin | 2006/01/23 16:05 |
|
jniinoさん、続きを楽しみにしています。 | |
| Fumiaki Yoshimatsu | 2006/01/24 11:21 |
|
AjaxとRESTはレイヤが異なるのでパラドックスにはなりません。RESTはアーキテクチャスタイル、Ajaxは実装技術です。画面が部分的にしか再描画されなくても、アプリケーションとして状態を変化させた結果としての新しいリソース表現を示すことは十分可能です。目に見える部分という意味でも、ブラウザのアドレス欄を再描画のタイミングで書き換えたり、現在のリソース表現を保存するURLを示すことはAjax的アプリケーションで普通に行われています。AjaxとRESTはまったく異なるレベルの「モノ」に付けられた名前なので、単純に並べて矛盾を指摘するのは意味がありません。 | |
| jniino | 2006/01/24 13:38 |
|
吉松さん、ツッコミありがとうございます。「AjaxとRESTはレイヤが違う」というのは適切なご指摘と思います。やっぱり「パラドックス」という表現はよくなかったかもしれないです。続きをどうやって書こうかな....考えます。 | |
| K.Nakagome | 2006/05/18 16:19 |
|
用語解釈のずれの歴史を経て、現在RESTと言う用語は概ね以下の2つの意味で用いられていると考えられます。 RESTfulなどと表現される場合のRESTは明らかに前者です。REST構造の原則に忠実である状態ということです。 今日、RESTという用語の使われ方は実に混沌としており、多くはその混用にさえ気づいていない状況のように思われます。そこで、「 xxの REST APIは RESTfulでない・・・」という表現までも登場してくるわけです。 ところで、Web2.0の要素として論議される場合のRESTは後者(派生的な意味)であるといえるでしょう。重量級のSOAPおよびWS-*群に対して、軽量級の POX(Plain Old XML) over HTTPの方が、Web2.0 principles の Lightweight Programming Models により適合しているということなのです。 「軽量なプログラミングモデル」と「リッチなユーザ経験」、これは明らかに直行する問題ですね。そのように考えてきますと、Web2.0の要素としての「REST」と「AJAX」はパラドクスではないことがご理解いただけるのではないでしょうか。 | |

新野淳一
| 日 | 月 | 火 | 水 | 木 | 金 | 土 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | ||
| 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 13 | 14 | 15 | 16 | 17 | 18 | 19 |
| 20 | 21 | 22 | 23 | 24 | 25 | 26 |
| 27 | 28 | 29 | 30 | 31 |
オルタナティブ・ブログは、専門スタッフにより、企画・構成されています。入力頂いた内容は、アイティメディアの他、オルタナティブ・ブログ、及び本記事執筆会社に提供されます。
ストレス社会との付き合い方
「思いやり経営」のススメ
テレワークが労働者のマインドを変える
求む、クックパッド男子
37歳の常識――我々は一生学び続ける