RESTとは何か?
RESTとは、Representational State Transferの略です。RESTは、HTTPプロトコルを使ってコンピュータ間でデータをやり取りするための洗練された手段を提供します。その鍵となるのは、HTTPリクエストです。Webの最も初期の時代には、HTTPリクエストは主に、Webサーバからファイルを取得するために使用されていました。
例えば、筆者のプロフィール情報が記載されたHTML Webページを作成し、そのページを、myProfile.htmlというファイルとしてBobInfoというディレクトリに保存したとします。そのファイルを参照したいユーザーは、http://www.myExampleWebSite.com/BobInfo/myProfile.htmlというURLを呼び出します。URLを受け取ったWebサーバは、このファイルを取得し、呼び出し元のコンピュータのブラウザ(またはHTMLを解釈できる何らかのコンピュータベースの処理機構)に、そのファイルバイトを返すという仕組みです。もちろん、時の流れとともに、処理はこれよりもずっと複雑になっています。データ駆動のWebページの場合は、Webページを実行時に作成することが求められます。そのため、最近のmyProfile.htmlでは、筆者のプロフィール情報を記述したHTMLが、ハードコーディングされたWebページとしては含まれていない場合もありえます。その場合のWebサーバは、HTMLファイル(大体はJSP、ASPX、またはPHPファイル)を、Webページを動的に生成するためのサーバ側データ駆動プログラミングロジックがちりばめられたHTMLを含むコードとして解釈していると言えます。こうなってくると、HTMLテキストのページを動的に作成するという概念そのものが薄れてきました。WebサーバにXMLを作成させ、それを返すようにしたらどうか、XMLをHTTPリクエストの一部として受けつけるようにしたらどうか、SOAPメッセージのような、さらに複雑なXML構造を返すようにしたらどうか ― 用途はどんどん広がりました。WWWにおいて、不可能なものなど存在しません。こうして時を経るごとにHTTPリクエストとHTTPレスポンスはますます複雑で扱いにくいものとなり、今後もこの流れは変わらないと思われていました。そこで登場したのがRESTです。
RESTの世界では、すべてがもっと単純で、おもしろいものになります。まずRESTでは、URL(純粋なREST主義者に言わせればURI)は「もの」を表します。「もの」とは、名詞であると考えることができます。
例えば、www.CoolCars.com/salesman/reselman/bobというURLは、Bob Reselmanという名前の販売員を表し、www.CoolCars.com/lenders/contact/reselman/bobという別のURLは、Bob Reselmanという名前の貸主担当者を表すことができます。ここで理解すべき重要な点は、URLが「もの」を定義しているということと、その定義の構造は呼び出されるドメインによって定義されるということです(この記事の後半では、WADL(Web Application Description Language)を使用して、あるRESTドメイン内の「もの」を呼び出す方法を紹介します)。
RESTでは、URLが「もの」を定義するということが分かりました。では、「もの」を使って何ができるのでしょうか? まず考えられるのは「もの」をドメインから取り出したり、ドメインに追加したり、ドメインから削除したりすることです。では、どのようにしてこれらの操作を行うのでしょうか? ここで登場するのがHTTPメソッドです。
上述のように、RESTではHTTPプロトコルを使用して、非常に強力な処理を非常に簡単な方法で行います。RESTが多用するHTTPプロトコルの機能の1つが、METHODフィールドです。最もよく知られているHTTPメソッドは、GETとPOSTです。昔のWeb開発者は、処理に使うクエリ文字列やフォーム情報をWebサーバに引き渡すための手段としてGETとPOSTの値を使用していました。
しかしRESTでは、METHODフィールドをもっと賢明な方法で使用します。RESTの考え方は、「これらのメソッドを、もともとの想定どおり、HTTPリクエストの意図に関する指示として使おうではないか」というものです。そこでRESTでは、GETはデータを取得すること、PUTはデータを追加すること(POSTと同じ)、DELETEはデータを削除することを意味します。RESTで使用できるHTTPメソッドは、他にも存在します。しかしここでは、これらの基本的なメソッドのみを対象に、話を進めることにしましょう。
これでRESTの基本概念が分かりました。RESTでは、URLによって「もの」を定義し、HTTPリクエストのMETHODフィールドを設定することで「もの」を取得したり、追加したり、削除したりできます。確かにこれは、普通のWeb開発者よりも低いレベルでHTTPプロトコルを扱っていることになります。しかし、本質的なHTTPを扱う方法がつかめれば、ずっと容易に、ずっと高度な作業が可能となるのです。
