Webアーキテクチャのお勉強(前半)
今更ながら「Webを支える技術 ~HTTP、URI、HTML、そしてREST~」を読んだので自分の理解のためにも軽くまとめてみました。
RESTfulとはどういうことか、RESTに代わると言われる最近HOTなGraphQLについても述べていくよ。
間違いありましたらぜひぜひコメントください。
RESTとは?
歴史
90年代のwebの急速な発展に伴い、HTTP,URI,HTMLの標準化を執り行う必要性が生じてきた。この問題を解決するためBerners-Leeが中心となって設立したのが W3C(World Wide Web Consortium) である。このような背景で、Roy Fieldingという人物がwebアーキテクチャを分析し、とりまとめを行ったのがRESTである。
Resourceとは
RESTについてまとめる前にResourceを軽く説明。
リソースとは、簡単には「Web上にあるありとあらゆる情報」のことを指す。このリソース一つ一つを識別するための名前こそが、URIとなっている。あるURIが示すリソースは一意に定まり、URIを指定すればコンピュータは期待のリソースへアクセスできる。
なお、URIが指すリソースは一意だが、リソースは複数のURIを持つことができる。これによりリソースにアクセスしやすくなる。
アドレス可能性(Addressablity)
アドレス可能性とは、URIが備える、リソースを簡単に指し示せる性質のことである。
リソースの「表現」
リソースとは「web上の情報」という曖昧な概念であったが、実際にはクライアント・サーバ間でデータのやり取りを行う。このデータのことを「リソースの表現」と呼ぶ。概念的であったリソースが表層に出てきたものを指す。もちろん、このデータの現れ方は何通りも存在しうる。例えば天気情報は、HTMLで表現されることもあれば、画像やテキスト形式にもなりうる。
リソースの「状態」
またリソースは「状態」が変わりうるものである。例えば「今日の天気」というリソースは、時間とともに変化してゆき、「晴れ」から「雨」、はたまた「曇り」へとその状態を変え得る。
RESTとは
RESTとは、Representational State Transferの略称。これは「HTTPとは、ハイパーテキストだけでなく、実際には『リソースの状態(Resource Dtate)』及び『リソースの表現(Representation)』を運んでいる」としたものである。
具体的にRESTの設計思想を列挙すると、以下のような特徴があげられる。
クライアント/サーバ型 : ユーザインターフェースと、リクエストの処理を分離できる
ステートレス : サーバがアプリケーションの状態を管理しないことで、実装が楽になる。これはReact.jsの設計思想とも似てるね(コンポネント/コンテナの関係性とか)
キャッシュ : 通信を減らすことで、サーバの負荷を軽減。やりすぎると情報の信頼性が下がる。
統一インターフェース : インターフェースを統一する(HTTPのメソッドは8種類のみ)ことで、クライアントとサーバの実装がより独立性を高められる(=相手のことを意識しなくてよい)。
階層化システム : ロード(Load)バランサやプロキシを間に挟んで負荷分散を行う(これだけじゃないけど)。インターフェースが統一されているからこそできる。
コードオンデマンド : プログラムコードをサーバからダウンロードし、クライアント側で実行すること。
なんだかどれも分散システムの授業でやったことと同じだった。コードオンデマンドもコードマイグレーションの一種と考えられる。
このように設計することで、リソース同士繋がりあったハイパーリンクが成り立ち、大規模分散システムのwebを構築できるのだ。
GraphQLとは?
...
ブログ執筆欲を強制的に向上させるため、近日中にブログを書くことを宣言します…。