第3章 REST - Webのアーキテクチャスタイル

アーキテクチャスタイルの重要性

RESTはWebのアーキテクチャスタイルです。 (p.75)

アーキテクチャスタイルは別名「(マクロ)アーキテクチャパターン」とも言い、複数のアーキテクチャに共通する性質、様式、作法あるいは流儀を指す言葉です。(p.75)

・アーキテクチャスタイルの例: MVC (Model-View-Controller), Pipe and Filter, Event System

アーキテクチャスタイルとしてのREST

抽象化レベル Webでの例
アーキテクチャスタイル REST
アーキテクチャ ブラウザ、サーバ、プロキシ、HTTP、URI、HTML
実装 Apache、Firefox、Internet Exploerer

リソース

リソース: Web上に存在する、名前 (URI) を持ったありとあらゆる情報

アドレス可能性 (Addressability): URIが備える、リソースをかんたんに指し示せる性質のこと

・1つのリソースは複数のURIを持つことができる

リソースの表現 (Resource Representation): サーバとクライアントの間でやりとりするデータ

スタイルを組み合わせてRESTを構成する

RESTは以下のアーキテクチャスタイルをクライアント/サーバに追加したものである

・ステートレスサーバ (Stateless Server): クライアントのアプリケーション状態をサーバで管理しない

(※ Cookieを使ったセッション管理はステートフルな例外である)

・キャッシュ (Cache): 一度取得したリソースをクライアント側で鮮度に基づき使い回す

・統一インタフェース (Uniform Interface): リソースに対する操作を、統一した限定的なインタフェースで行う (ex. GETやPOSTなどの操作のこと)

・階層化システム (Layered System): システムをいくつかの階層に分離する (ex. ロードバランサ)

・コードオンデマンド (Code on Demand): プログラムコードをサーバからダウンロードし、クライアント側でそれを実行する。もともとはOptionalなスタイル

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

たとえばP2P (Peer to Peer) は代表的なREST以外のアーキテクチャスタイルです。 (p.92)

RESTの2つの側面

・接続性 (Connectedness): リソースをリンクで接続することで1つのアプリケーションを構成するという考え方

・粗粒度 (Coarse-Grained): インターフェースの粒度が粗いため性能劣化を起こしにくい

RESTの意義

(割愛)