「Webを支える技術」のまとめです
###1章 Web概論
##リソースとは
・リソースとは、Web上に存在する情報である
・世界中の無数のリソースとは、それぞれURLで一一意の名前を持つ
・URLを用いることで、プログラムはリソースが表現する情報にアクセスできる
サーバととクライアントの間でリソースのやり取りが発生することを、「リソースの表現」と言う。
1つのリソースは複数の表現を持つことが出来る。
-HTMLやPDFなど、、
また、リソースには「状態」があり、時間の経過で状態を変化させることが出来る。
そして、状態が変化すると、リソースの表現も変化する。
#RESTとは
・クライアント/サーバ
・ステートレスサーバ
・キャッシュ
・統一インターフェイス
・階層化システム
・コードオンデマンド
の6つを組み合わせたアーキテクチャスタイルのこと
####クライアント/サーバ
Webが通信するときに使用されるアーキテクチャスタイル。HTTPとういうプロトコルを用いて通信する。クライアントがサーバに対してリクエストを送り、サーバがレスポンスを返す。
クライアントとサーバに分離させることによって、単一のコンピュータで処理を行わなくても済むようになっている。
####ステートレスサーバ
クライアント/サーバに最初に追加するアーキテクチャスタイル。
クライアントサーバにアプリケーション状態を管理しないことを意味します。
逆に、HTTPをステートフルにするのが、Cokkieを使用したセッション管理である。
クライアント/サーバにステートレス性を導入すると、アーキテクチャスタイルは「クライアント/ステートレスサーバ」になる。
####キャッシュ
リソースの鮮度に基づいて、一度取得したリソースをクライアント側で使いまわす方式。
サーバとクライアント間の通信を減らすことで、より効率的に処理ができる。しかし、古いキャッシュを利用してしまい、情報の信頼性が落ちてしまうことがある。
キャッシュを追加したアーキテクチャスタイルは、「クライアント/キャッシュ/ステートレスサーバ」と呼ばれる。
####統一インターフェース
URLで指し示したリソースに対する操作を、統一した限定的なインターフェースで行うアーキテクチャスタイルのこと。
例えば、HTTP1.1では、GETやPOSTなど、8個のメソッドに限定されている。この制約のおかげで全体のアーキテクチャがシンプルになるだけでなく、クライアントとサーバの実装の独立性が向上する。
統一インターフェースを追加したアーキテクチャスタイルは「統一/クライアント/キャッシュ/ステートレスサーバ」と呼ばれる。
####階層化システム
統一インターフェースの利点の一つに、システム全体が階層化しやすいということがある。
例えばWebサービスでは、サーバとクライアントの間にロードバランサを設置して負荷を分散したり、プロキシを設定してアクセスを制限したりします。
クライアントからすると、サーバもプロキシも同じインターフェースで接続できるので、接続先がサーバからプロキシに変わったことを意識する必要がない。これは、サーバやプロキシなど、各コンポーネント間のインターフェースをHTTPで統一しているから実現できる。
このようにシステムをいくつかの階層に分離することが出来る。
階層化システムを追加したアーキテクチャスタイルは「統一/階層化/クライアント/キャッシュ/ステートレスサーバ」と呼ばれる。
####コードオンデマンド
プログラムコードをサーバからダウンロードして、クライアント側でそれを実行すること。
コードオンデマンドの利点は、クライアントプログラムに予め用意していた絹だけでなく、新しい機能を拡張していけることにある。
ただし、コードオンデマンドを利用すると、ネットワーク通信のプロトコルの可視化の低下に繋がることだ。
コードオンデマンドを追加したアーキテクチャスタイルは「統一/階層化/コードオンデマンド/クライアント/キャッシュ/ステートレスサーバ」と呼ばれる。
RESTはアーキテクチャスタイルなので、システムを設計する際には、そのシステムのアーキテクチャを作らなければならない。
RESTを構成するスタイルのうち、いくつかを使用しないこともあり得る。
##RESTの二つの側面
RESTは、ハイパーメディアと分散システムにより、世界的な成功を収めた。
###RESTとハイパーメディア
リソースをリンクで表現することで、1つのアプリケーションを表現するという考え方。RESTの基幹となる思想である。
ハイパーメディアを用いたアプリケーションは、リソースのURLさえ分かれば、そのアプリケーションが提供しているリソースを他のアプリケーションでも簡単に再利用出来るという利点がある。
リソースをリンクで接続することで1つのアプリケーションを構成するという考え方は、「接続性」とも呼ばれる。
###RESTと分散システム
RESTに基づいたWebでは、統一インターフェースによってインターフェースが固定されているため、互換性の問題が発生しない。
リソースで適応できるHTTPメソッドは常に固定であり、HTTPを実装したクライアントであれば同じように接続できる。
##まとめ
WebはRESTという分散ネットワークシステムの理論があったからこそ、ここまで成長したとも言える。
個別のWebサービスやWeb APIがRESTfulになると、Webは全体として良くなる。
以降の章で、THHP、URI、そしてHTMLなどのハイパーメディアフォーマットをどのようにRESTfulに使うか、どのように設計するのかを見ていく。