Randomwalk:ITmediaオルタナティブ・ブログ (RSS) Randomwalk

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

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開発者の日に個人的にいちばん「なるほど」と思ったのは、ステートレスはスケーラビリティ実現の重要なカギだった、ということです。メモメモ。

jniino

Special

- PR -
コメント
pass_secret 2006/01/23 08:42

いつも楽しく読ませていただいています。
『XML開発者の日』というのがあったんですね。
ステートレスはスケーラビリティ・・・
気になりますね。
次回を楽しみにしてます^^

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さん、続きを楽しみにしています。
こちらのブログで書かせていただいたように、プログラムのプの字も知らない人間ではありますが(笑)。
それと、HNさんのハンドルへの件ですが、もしかしたらご本名の頭文字かも、といったことも考えられるので、お詫びします。

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つの意味で用いられていると考えられます。
「本来の意味 : ロイ・フィールディング氏の論文に見られる Representational State Transfer 構造、およびその原則」
「派生的な意味 :一般にSOAP等と対立、もしくは並立した概念として捉えられる 平易なXML over HTTP 」

RESTfulなどと表現される場合のRESTは明らかに前者です。REST構造の原則に忠実である状態ということです。
>“Webアプリケーションであれば、状態やリソースごとに異なるURLを持とう”といったアーキテクチャ
という表現も前者の意味かと思われます。
一方、REST APIなどと表現される場合のRESTは概ね後者です。これは、REST vs. SOAP at Amazon( http://www.oreillynet.com/pub/wlg/3005 )あたりに端を発するのかと推測できます。これをRESTの誤用とする意見も見られます。当初誤用から派生したであろうことは想像に難くありませんが、現在は既に定着している語意と捉えて差し支えないと思います。
http://ja.wikipedia.org/wiki/REST

今日、RESTという用語の使われ方は実に混沌としており、多くはその混用にさえ気づいていない状況のように思われます。そこで、「 xxの REST APIは RESTfulでない・・・」という表現までも登場してくるわけです。
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/19056
http://www.witha.jp/blog/archives/2006/03/rest.html
http://yohei-y.blogspot.com/2005/05/rest-9-rest-soap.html

ところで、Web2.0の要素として論議される場合のRESTは後者(派生的な意味)であるといえるでしょう。重量級のSOAPおよびWS-*群に対して、軽量級の POX(Plain Old XML) over HTTPの方が、Web2.0 principles の Lightweight Programming Models により適合しているということなのです。
今一度、Tim O'Reillyの What Is Web 2.0 を読み返してみましょう。 5. Lightweight Programming Models ( http://www.oreillynet.com/pub/a/oreilly/tim/news/2005/09/30/what-is-web-20.html?page=4 )でRESTが登場しますが、simply providing XML data over HTTP, in a lightweight approach sometimes referred to as REST とあります。少なくとも、
> Web2.0的なアプリケーションはREST的に行儀のいいアプリケーションが望ましい
とは読めないはずです。
一方、AJAXに関しては リッチなユーザ経験の実現手段として、7. Rich User Experiences ( http://www.oreillynet.com/pub/a/oreilly/tim/news/2005/09/30/what-is-web-20.html?page=5 )に登場します。

「軽量なプログラミングモデル」と「リッチなユーザ経験」、これは明らかに直行する問題ですね。そのように考えてきますと、Web2.0の要素としての「REST」と「AJAX」はパラドクスではないことがご理解いただけるのではないでしょうか。
このあたりを完結にまとめている概念図を見つけましたのでご紹介します。
http://hinchcliffe.org/img/web20stratigraphic.jpg


コメントを投稿する
メールアドレス(必須):
URL:
コメント:
トラックバック

http://app.blogs.itmedia.co.jp/t/trackback/77444/2895016

トラックバック・ポリシー


» このブログのTOP

» オルタナティブ・ブログTOP


プロフィール

新野淳一

新野淳一

月刊誌の編集、フリーランスを経て、2000年に(株)アットマーク・アイティの設立に参加。2008年に@IT発行人を退任し、現在はPublickey編集長/Blogger in Chief。

詳しいプロフィール

カレンダー
2011年3月
    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    
カテゴリー

オルタナティブ・ブログは、専門スタッフにより、企画・構成されています。入力頂いた内容は、アイティメディアの他、オルタナティブ・ブログ、及び本記事執筆会社に提供されます。


最近のトラックバック
エンタープライズ・ピックアップ

news094.gif ストレス社会との付き合い方
政府がメンタルヘルス検査の義務化を検討しています。しかしうつになった後だけではなく、なる前の予防も大切なのではないでしょうか。(5/24)

news094.gif 「思いやり経営」のススメ
産学・NPO連携の民間団体が先頃、「思いやり経営」という観点で評価した指標や企業ランキングを発表した。企業のマネジメント力を知る手立てとして注目されそうだ。(5/24)

news094.gif テレワークが労働者のマインドを変える
テレワークが普及すると、労働者の評価は従来の「時間×生産性」から「成果」へと変化する。時間や場所を自分の裁量でコントロールできる変わりに、成果を最大化するために労働をマネジメントする能力とマインドが労働者には必要になる。(5/23)

news094.gif 求む、クックパッド男子
高身長も高学歴も高収入もいらない。私が男性に求めるのは「料理の腕」だけです。(5/18)

news094.gif 37歳の常識――我々は一生学び続ける
学び続けなければ衰退するのみだ。(5/18)

Special

- PR -

サイトマップ | 利用規約 | プライバシーポリシー | 広告案内 | お問い合わせ