Web API や Webアプリについての話で、REST(RESTful, REST API)という言葉をよく聞きます。今までぼんやりとしか理解していなかったのですが、APIを作ることになったので詳しく調べてみました。
RESTとは
RESTは REpresentational State Transfer の略で、RESTはデザインのルールの事を指していて、RESTfulなサービスとは以下の6つのルールに則ったデザインの事を言います。
- クライアントとサーバーの区別 : サービスを提供するサーバーと、それを消費するクライアントという区別があること
- Statelessである : クライアントからの1つのリクエストは、そのリクエストを実行するための必要な情報をすべて含んでいなければならない。つまり、サーバーはクライアントのセッション情報を保持しない。クライアントの状態をサーバで管理しないということ
- Cacheable : サーバー側はクライアントに、リクエストがキャッシュされるかどうかを示さなければならない。
- 階層システム : クライアントとサーバーの通信を標準化し、2つの仲介者が代わりにレスポンスを返せるようにする。例えば、proxyサーバーは、通信が標準化されてるからこそできる。クライアント側はエンドサーバーがレスポンスを返すかproxyサーバーが返すかの区別がつかない(これはシステムがいつも同じに見えていいこと)。
- 統一されたインターフェイス : URIによって指し示されるリソースを、HTTPのGETやPOSTなどのメソッドを指定するという統一されたインターフェイス。
- コードオンデマンド : 6つのうち唯一オプショナルなルール。サーバーは、文脈に合わせて実行ファイルやスクリプトをクライアントに提供することができる
RESTfulなサービス
このようなルールは、元々wwwが使用するプロトコルであるHTTPプロトコルにフィットするようにデザインされました。
RESTfulなサービスで大事なことは、リソースという概念です。URIによって識別される"リソース"に対して、GET/POST/PUT/DELETE のメソッドを用いて働きかけます。GETでリソースについての情報を得る、POSTで新しいリソースを作る、PUTでリソースを更新し、DELETEでリソースを消去する、などのようにです。
RESTはデータ・フォーマットの指定を特にしていませんが、最近はJSONが主流ですね。