RESTとは
RESTとは、Webのアーキテクチャスタイルです。
アーキテクチャスタイル(アーキテクチャパターン)とは、複数のアーキテクチャに共通する様式のことです。
「アーキテクチャ」というのは「構造」を表す用語です。
Webの構造様式がRESTということになります。
Webとは何かに関しては以下を参照してください。
RESTの中身
ネットワークシステムにおいて最も有名なアーキテクチャスタイルは「クライアント/サーバ」です。
RESTは、クライアント/サーバにいくつかのアーキテクチャスタイルを追加して(制約を加えて)いったものです。
結論をいうと、RESTとは、以下の6つを組み合わせたアーキテクチャスタイルということになります。
クライアント/サーバー
ステートレスサーバ
キャッシュ
統一インターフェース
階層化システム
コードオンデマンド
クライアント/サーバー
webの場合、HTTPというプロトコルでクライアント(ブラウザ)とサーバ(ウェブサーバ)が通信するスタイルを採っています。これによってユーザインターフェース(ユーザが操作する画面)と処理(バックエンド)を分離することができます。
ステートレスサーバ
これはクライアントのアプリケーション状態をサーバ側で管理しない方式です。
しかし、実際はCookieを使ったセッション管理などステートフルなWebサービスはたくさんあります。
キャッシュ
これは一度取得したリソースをクライアント側で使い回す方式です。
Webに限らずいろんなシステムで使われている方式ですね。
統一インターフェース
これはURIで指し示したリソースに対する操作を統一された限定的なアクションとする方式です。
HTTPではGETやPOSTなど8個に限定されたメソッドだけが定義されています。
階層化システム
これはシステムをいくつかの階層に分離する方式です。
例えば、クライアント-サーバ間にロードバランサーやプロキシサーバを加えることで役割を階層化します。
各階層間のインターフェース(接続部分)をHTTPで統一しているため階層化を実現できます。例えば、クライアント側からは、直接ロードバランサーにつながっているのか、Webサーバにつながっているのか、アプリケーションサーバにつながっているのかを意識する必要がありません。
コードオンデマンド
これはプログラムコードをサーバからダウンロードし、クライアント側で実行する方式です。
例えば、Javascriptの実行はこれに当たります。
まとめ
RESTは、Webのアーキテクチャスタイルです。
6つのアーキテクチャスタイルが組み合わさって構成されています。
個々のWebサービスがRESTful(RESTに忠実)な設計になっているとWeb全体としてRESTfulになります。
ただし、RESTが絶対というわけではありません。