HTTP、URI、HTMLの関係
Webを支える基本的な技術のHTTP、URI、HTMLの関係は下図のようになる。今までそこまで意識していなかったので、この関係図は『確かに、なるほどなー😲』と思いました。
アーキテクチャスタイルとデザインパターン
アーキテクチャスタイルは別名『(マクロ)アーキテクチャパターン』、複数のアーキテクチャに共通する性質、様式、作法、流儀などを指す言葉。REST(REpresentational State Transfer)もアーキテクチャスタイルで、他にはMBC(Model View Controller)やパイプ&フィルタ、イベントシステムなどある。
一方、似たような言葉でデザインパターンもあるが、デザインパターンの別名は『(マイクロ)アーキテクチャパターン』であり、アーキテクチャスタイルよリも粒度の小さいクラスなどの設計様式を指す。
両方ともアーキテクチャ設計時の設計指針、作法、流儀、つまりアーキテクチャスタイルとして利用する。
似たような言葉がいっぱい出てきたので、アーキテクチャスタイルについて、Webのアーキテクチャスタイルとアーキテクチャ、実装の違いとして表にまとめる。
抽象化レベル | Webでの例 |
---|---|
アーキテクチャスタイル | REST |
アーキテクチャ | ブラウザ、サーバ、プロキシ、HTTP、URI、HTML |
実装 | Apache、Firefox、Internet Explorer |
リソースとは
リソースは『Web上に存在する、名前を持ったありとあらゆる情報』のことで、具体的には下記のようなもの。
Web上においてリソースを特定できなければプログラムがリソースを処理することができないため、リソースの名前は『あるリソースを他のリソースと区別して指し示す』ためのもの。つまりリソースの名前というのは、URIのこと。
リソースについてまとめる。
また、URIが持つリソースを簡単に指し示せる性質のことを『アドレス可能性』と呼ぶ。
RESTの構成
RESTは複数のアーキテクチャスタイルを組み合わせて構築した複合アーキテクチャスタイル。ベースはクライアント/サーバであり、そこに他のアーキテクチャスタイルを追加して制約を課すことで、RESTが構成されている。
クライアント/サーバ
クライアントからリクエストを出し、サーバがそれにレスポンスする。
ステートレスサーバ
クライアントのアプリケーション状態をサーバが管理しない。現実では、Cookieを用いたセッション管理が多々利用されている。
キャッシュ
一度取得したリソースをクライアント側で使い回す。サーバクライアント間の通信を減らすことで効率的に処理する。
統一インターフェース
URIで指し示したリソースに対する操作を統一した限定的なインタフェースで行うアーキテクチャスタイル。例えばHTTP1.1では、
GET
やPOST
などの限られた8個のメソッドだけが定義されている。階層化システム
インタフェースを統一化することで、システム全体を階層化しやすくなる。例えば、Webサービスでは、サーバクライアント間にロードバランサーを設置するとか、レガシーシステムとブラウザ間にHTTPインタフェースを設置することで、クライアントは同じインタフェースを利用して色々なサービスを利用できるようになる。 こうしたシステムをいくつかの階層に分離したアーキテクチャスタイルを階層化システムと呼ぶ。
コードオンデマンド
プログラムコードをサーバからダウンロードし、クライアント側で実行するアーキテクチャスタイル。JavaScriptやFlashなどが該当する。
RESTを構成するスタイルは上の6つであるが、実際の設計においては、その制約を除外しても良い。例えば『ステートフルにして、そのほかは制約どおり』みたいな感じで、実際に動作して価値を提供できるシステムを作ることが大事。
REST以外の代表的なアーキテクチャに『P2P:Peer to Peer』があり、サーバを介さずにピア間通信が必要な場合にはP2Pの方が適している。