RESTとは?

RESTとは?

一言で言うと、Webのアーキテクチャスタイルです。
MVCやパイプ&フィルタ、イベントシステムと同じ物になります。

つまりアーキテクチャ設計の指針、作法、流になるものです。。
つまりシステムのアーキテクチャを決定する際の羅針盤となります。

RESTを理解する上で、リソースという重要な概念があります。
まずはそれを解説します。

リソース

簡単にまとめると、

  • リソースとはWeb上の情報のこと。
  • 世界中の無数のリソースは、それぞれ一意のURIをもつ。
  • URIを用いることで、プログラムはリソースにアクセスできる。

という感じです。

Web上のあらゆるページがリソースとなります。
全ての情報が一意のURIをもつので、私たちは他の情報を区別してアクセスすることができます。

なお、URIとはURLとURNの二つを合わせて総称ですが、現在のWeb上ではURNはほとんど使われていないので、実質URI=URLと思ってもらって問題ないです。

RESTを構成するもの

RESTとは複数のアーキテクチャスタイルを組み合わせて構築した複合アーキテクチャです。
次にRESTを構成するそれぞれのアーキテクチャスタイルを見ていきます。

クライアント/サーバ

クライアント(ブラウザ)がサーバにリクエストを送り、サーバはそれに対してレスポンスを返すという仕組みのことです。
この仕組みの利点はクライアントとサーバを分離して処理できることです。
以下のようなメリットがあります。

  • クライアントがPCだけじゃなく、携帯電話やゲーム機からでもアクセスするようにできる。
  • サーバはデータストレージとしての機能だけ提供すれば良くなる。
  • 複数のサーバを組み合わせられる。

ステートレス

クライアントのアプリケーション状態をサーバが管理しないことです。
こうすることでサーバ側でアプリケーション状態を記憶しておく必要がなくなるので、実装を簡略化できます。

HTTPをステートフルにする代表格はCookieを使ったセッション管理です。
Cookieに情報を記憶しておくことで、例えば「ユーザーがログインしている」といった状態を管理できるようになります。

キャッシュ

一度取得したリソースをクライアント側で保存して、使い回す機能のことです。
クライアントとサーバの間の通信が減ることにより、通信速度の向上が見込めます。

統一インターフェース

URIで指し示したリソースに対する操作を、統一した限定的なインターフェースで行うことです。
具体的には、GETやPOSTなどのHTTPメソッドのことです。
これらのメソッドは8個に限定されていて、Web上では全てこれら8個のメソッドだけでクライアントとサーバがやりとりをします。

インターフェースが統一されているということがRESTにおける最大の特徴です。

詳しくは以下の記事を参照してください。
8つのHTTPメソッドの特徴と性質まとめ

階層化システム

統一インターフェースではシステムが階層化しやすいです。
サーバとクライアントの間にロードバランサを設置して負荷分散したり、プロキシを設置してアクセスを制限したりできます。

コードオンデマンド

サーバからプログラムコードをダウンロードし、クライアント側で実行できることです。
具体的にはJavaScriptやFlashなどのことを指します。

つまりRESTとは?

上記6つを組み合わせたアーキテクチャスタイルのことを「REST」と呼びます。

  • クライアント/サーバ: ユーザーインターフェースと処理を分離する。
  • ステートレスサーバ: サーバ側でアプリケーション状態を持たない。
  • キャッシュ: クライアントとサーバの通信回数と量を減らす。
  • 統一インターフェース: インターフェースを固定する。
  • 階層化システム: システムを階層に分離する。
  • コードオンデマンド: プログラムをクライアントにダウンロードして実行する。

これらに沿ってWebサービスを設計するべきとされています。
ただしいくつか除外してもいいです。

ちなみに、「RESTful」=「RESTの制約に従っていてRESTらしいこと」です。
WebサービスやWeb APIがRESTfulになるとWebは全体としてより良くなります。