[画像のクリックで拡大表示]

 RESTは,Webに代表されるネットワーク・ベースの分散アプリケーション設計のための「アーキテクチャ・スタイル」の一つです。World Wide Webの祖の一人,Roy T. Fielding氏が2000年に著した博士論文に詳しく述べられています。Fielding氏はHTTP/1.0の仕様書であるRFC1945の共著者の一人で,Apache Software Foundationの共同創設者の一人でもあります。

  Fielding氏の論文では,(1)名前を付けられるすべての情報を「リソース」として,それらを指し示すURL(実際には,より包括的なURI=Uniform Resource Identifier)を持たせること,(2)リソースをHTTPの四つの動詞(GET,POST,PUT,DELETE)で操作できるようにすること,(3)サーバーがステートレス(状態を持たない)であること,などが必要だとしています(REST自体はWeb以外のプラットフォームにも適用できます)。この論文はWebに公開されています(http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm)。

 RESTに特徴的なのが「リソース」とその「表現(representation)」という考え方です。URLなどで表される“リソース”が指し示すのは特定の文書や画像ではなく,概念であるという考え方を採ります。

 概念と実際の情報を結びつけるのがサーバーの役目で,リソースを要求されるとサーバーがその時点でそのリソースに対応する最も適切な「表現(representation)」を返す,と考えるわけです。例えば,「最新のニュース」「昨日の最高気温」といったリソースに対応する適切な表現は日々移り変わっていきますが,クライアントはずっと同じURLで対応する情報を得ることができます。

 あらゆるリソースにURLを持たせる結果として,このようなサービスでは,必要なパラメータをURLに含めてやり取りすることになります。このため,URLの一部としてパラメータを渡すWeb APIを「REST形式のAPI」などと呼ぶ場合があります。しかし,URLでパラメータを渡しさえすればシステムがRESTに則ったもの(「RESTフルなシステム」と呼びます)になるわけではありません。RESTそのものの定義についても,今なお議論があります。