2005-04-24

REST 入門(その4) HTTP GET -- その絶大な効果

» REST 入門 目次

前回は、リソースの特徴について解説しました。 しかし、なぜリソースが重要なのかはまだわからないと思います。 今回はその一部を紹介します。

まず、おさらいしましょう。 僕たちは以下のリソースを例に使っています。

  • 東京の天気予報
  • 2005年8月24日のスケジュール
  • 新花巻駅の写真
  • Dijkstra 著 "Go To Statement Considered Harmful"
  • 僕の最近のブックマーク

そして、それぞれのリソースの識別子(URI)は以下のようになります。

  • http://weather.yahoo.co.jp/weather/jp/13/4410.html
  • https://example.com/schedule/20050824
  • http://www.flickr.com/photos/60043209@N00/6337155/
  • http://www.acm.org/classics/oct95/
  • http://del.icio.us/yohei

ここで質問です。URI を与えられたら、あなたは何をしますか?

ここで答を直接聞けないのは残念ですが、大多数の人は、URI をコピーして Web ブラウザの URI 欄(IEだったらアドレス欄)に貼り付け、 そしてリターンキーか「移動」ボタンを押すのではないでしょうか。 上記の URI は、スケジュール以外は全部実際にブラウザで見ることができるURL ばかりです。 ぜひコピー&ペーストしてみてください。

URL 貼り付けというなにげない日常的な行為、これが REST では非常に重要なのです。 ブラウザに URI を入力してリターン、するとブラウザはURI に示された Web サーバに対して HTTP の GET メソッドを発行します。

GET /weather/jp/13/4410.html HTTP/1.1
Host: weather.yahoo.co.jp

Web サーバは結果(その時点での東京の天気予報の HTML ページ)をブラウザに返します。

HTTP/1.1 200 OK
Content-Type: text/html; charset=euc-jp

実際の HTML がここに入る

世界中の人々が日々行っているこのなにげない作業を REST 流に説明すると、 名詞(リソース)に動詞(HTTP GET)を適用した、ことになります。

ナンジャソリャ? と思った人もいるかもしれませんが、これはいわゆる「抽象化」です。 現実の世界で起きている Yahoo の東京の天気予報のページをブラウザに表示する、 という行為から個別の事情を取り払い、 なるべく汎用的に使える言葉で説明する(抽象化する)と 「Yahooの東京の天気予報」というリソースを取得(ゲット、GET、HTTP で GET)する(取得する」という動詞を適用)、 となるのです。

この HTTP GET という抽象化は絶大な効力を発揮しています。 あるリソースを識別する URI さえ与えられれば、 ブラウザを使って HTTP GET を適用するだけで、 そのリソースのある時点での表現を取得できるのです。 それが HTML 文書だろうと、PNG 画像だろうと、.swf ファイルだろうと、Javascript だろうと関係ありません。

ここで「リソースのある時点での表現」という言葉が出てきました。 これは REST の名前の元になっている Representational state のことです。 Representational state とは、あるリソースのある時点・条件での状態の表現を指します。 今日の時点での天気予報リソースと明日の時点での天気予報リソースは、 リソース自体の状態が異なるので取得できる表現も違います。 また、その表現は HTML かもしれないし、XML かもしれないし、PDF かもしれないし、はたまた何か別の形式かもしれません。 この表現をネットワークを介して転送する(Transfer)のが Representational State Transfer (REST) です。

今回はここで終了です。 次回は GET 以外の動詞を見ていこうと思います。

0 件のコメント:

コメントを投稿