REST (Webを支える技術:3章)
【3.1~3.2】アーキテクチャスタイルの重要性/アーキテクチャスタイルとしてのREST
実際のシステムは具体的なアーキテクチャを持っています。そのアーキテクチャを設計するときに、ただ闇雲に作っていくのではなく、アーキテクチャ設計の指針、作法、流儀、つまりアーキテクチャスタイルを適用します。
アーキテクチャーとアーキテクチャースタイルは違うものだよ!
思想をもとに実際の設計を行う
アーキテクチャスタイルは、特定の実装やアーキテクチャではない
実装から抽象度を1つ上げたのがアーキテクチャで、アーキテクチャから抽象度を1つ上げたのがアーキテクチャスタイル↓
本の図でちょっとイメージ湧いたかも。。
RESTはWeb全体のアーキテクチャスタイルでもあり、個別のWebサービスやWebAPIのアーキテクチャスタイルでもある。ただ、RESTといえばwebのアーキテクチャースタイルを指すことが多い。
抽象度を上げる=具体化の反対
アーキテクチャースタイルはREST以外にも色々ある
「[* RESTはクライアント/サーバーから派生したアーキテクチャースタイル」ってどういう意味?
クライアント/サーバー:クライアントとサーバがHTTPというプロトコルで通信して、クライアントはサーバにリクエストを送り、サーバはそれに対してレスポンスを返してあげる方式
RESTはこれに制約を加えたもの
「制約」って何?
web技術の基本の、ch.1の10が分かりやすい。
つまり、RESTはクライアント/サーバーに、この4つの原則を加えた=制約を加えたアーキテクチャースタイル
だから本では、「REST=クライアント/サーバ」とか「派生したもの」と説明がされてた
※2021/2/28追記:本では制約=4つの原則でなく、3.4の5つを追加したものと言ってるので、微妙に違うぽい?
RESTはweb全体のアーキテクチャーとWebサービスやWebAPIのアーキテクチャーの2つの側面を持つ
【3.3】リソース
【3.4】RESTは6つのアーキテクチャスタイルを組み合わせたスタイルである
RESTは複数のアーキテクチャスタイルを組み合わせて構築した複合アーキテクチャスタイル
= クライアント/サーバーというアーキテクチャスタイルに、他のアーキテクチャースタイルを追加する&制約をつけることで、RESTを構成している。
RESTとはつまり、次の6つを組み合わせたアーキテクチャスタイルのこと
RESTを構成するスタイルのうち、いくつかを除外してもかまいません。(=6つ全部が絶対に揃ってないといけないわけではない)
→読んだ感想:
順に説明されてくにつれ、このスタイルの呼び方はこうです、とスタイルが追加されていくので、「コードオンデマンドを追加したRESTのスタイルは、クライアント/サーバ~階層化システムのスタイルも追加しないといれちゃいけないの!?」と思っていたが、ちがった。
そもそも、RESTとはこの6つのアーキテクチャースタイルを組み合わせた、アーキテクチャスタイルである。
そしてこれらのうちいくつかを除外してもいい、と説明もある。
ユーザインタフェースはクライアントが担当するため、サーバはデータストレージとしての機能だけを提供すればいい
→たしかに、クライアントがもらったHTMLなどのデータの解析をして人に読みやすく変換してくれたりするので、そのことを言ってる?
ストレージ:データをしまっておく箱
☆追加するアーキテクチャスタイル6つ
①クライアント/サーバ:単一のコンピュータ上ですべてを処理するのではなく、クライアントとサーバに分離して処理できることが利点。
②ステートレスサーバ:サーバー側で状態をもたない(リクエストするたび毎回忘れてる、はじめまして)
HTTPをステートフルにするcookieはRESTの観点からすると、誤った拡張。しかし使わないわけにもいかないのが現状なので、必要最低限に使う。
③キャッシュ:一度取得したリソースをクライアント側で使いまわす方式。
例:「戻る」をクリックすると初めて接続したときより早い
④統一インターフェース
インターフェースとは:プログラム同士の接点
統一インターフェースってなに?:URLで示したリソースに対する操作を、統一した限定的なインターフェースで行う事。
統一インターフェースのメリットは?:インターフェースが統一されている事で、Webを利用しているシステムは同じHTTPメソッドで接続が出来る。
インタフェースの柔軟性に制限を加えることで全体のアーキテクチャがシンプルに
⑤階層別:システムをいくつかの階層に分離する。
具体例:サーバーとクライアントだけでなく、プロキシやロードバランサーを間に設置する=階層化する
https://gyazo.com/9651de42e2dd7f0e262e2016614bcd59
https://gyazo.com/d6ed0b05470941857447129b379f1d2b
⑥コードオンデマンド
プログラムコードをサーバからダウンロードし、クライアント側でそれを実行するアーキテクチャスタイルです。たとえばJavaScriptやFlash、Javaアプレットなどがこれに該当します
考え:もともとHTMLはクライアント側(ブラウザ)でもらったHTMLを解析して人が見やすいように変換してくれてた。ここでは、JSなどで書かれたプログラムも、クライアント側(ブラウザ)で実行できるよ、だからGoogleマップもぬるぬる動かせるよ、ということを言っていると解釈した。
【3.5】RESTの2つの側面
【3.6終】RESTの意義
WebはRESTという理論があったからここまで発展できた
RESTはWeb全体を構築するアーキテクチャスタイル ←❓このWeb全体としてのRESTがどんなスタイルかよくわかってない。
私達が作るWebサービスやWebAPIもWebの一部だから、RESTfulなWebサービスやWebAPIを作ることで、Web全体がより良くなる