Webを支える技術を読んだので、知識の整理も兼ねて、学んだことをご紹介いたします。
#RESTとは
RESTとはWeb全体のアーキテクチャスタイル(システムを設計するための指針)です。
RESTにしたがって個別のWebサービスを作ることで、Webは全体としてより良くなります。
RESTは次の6つを組み合わせたアーキテクチャスタイルになります。
###クライアント/サーバ
クライアントはサーバにリクエストを送り、サーバーはそれに対してレスポンスを返します。
クライアントとサーバに分けることで、単一のコンピュータで処理するのではなく、分離して処理できます。そのため、クライアントは色々な種類のデバイスからアクセスできます。
また、データストレージの機能を持つサーバを複数組み合わせることで可用性をあげることができます。
###ステートレスサーバ
ステートレス(Stateless)とは状態を持たないという意味です。
ステートレスサーバとは、クライアントのアプリケーション状態をサーバで管理しないことを意味します。
利点はサーバの実装を簡略化できます。また、クライアントのリクエストに応えたあとすぐにサーバの計算機リソースを開放できます。
###キャッシュ
一度取得したリソースをクライアント側で再度利用する仕組みです。
サーバとクライアントの通信を減らすことで、効率的に処理できるようになります。
###統一インタフェース
統一インタフェースとは、URIで指し示したリソースに対する操作を、統一した限定的なインタフェースで行うアーキテクチャスタイルのことです。
HTTPではGETやPOSTなどの8個のメソッドが定義されています。
限定的にすることで、全体のアーキテクチャがシンプルになり、クライアントとサーバの実装の独立性が向上します。
###階層化システム
先ほどの統一インタフェースの利点のひとつに、システム全体が階層化しやすいことがあります。
クライアントとサーバの間にロードバランサを設置して負荷分散したり、
プロキシを設置してアクセスを制限したりします。
###コードオンデマンド
プログラムコードをサーバからダウンロードし、クライアントでそれを実行するアーキテクチャスタイルです。
JavaScriptやFlash、Javaアプレットなどが該当します。
利点は、クライアントプログラムに新しい機能を追加することができます。
###RESTとはつまり
・クライアント/サーバ : ユーザインタフェースと処理を分離する
・ステートレスサーバ : サーバ側でアプリケーション状態を持たない
・キャッシュ : クライアントとサーバの通信回数と量を減らす
・統一インタフェース : インタフェースを固定する
・階層化システム : システムを階層に分離する
・コードオンデマンド : プログラムをクライアントにダウンロードして実行する
上記のRESTの制約にしたがって、RESTらしいことをRESTfulと呼びます。