ゆっくりのんびり。

いの (@inox_ee) です

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を持つことができる。これによりリソースにアクセスしやすくなる。

  1. アドレス可能性(Addressablity)

    アドレス可能性とは、URIが備える、リソースを簡単に指し示せる性質のことである。

  2. リソースの「表現」

    リソースとは「web上の情報」という曖昧な概念であったが、実際にはクライアント・サーバ間でデータのやり取りを行う。このデータのことを「リソースの表現」と呼ぶ。概念的であったリソースが表層に出てきたものを指す。もちろん、このデータの現れ方は何通りも存在しうる。例えば天気情報は、HTMLで表現されることもあれば、画像やテキスト形式にもなりうる。

  3. リソースの「状態」

    またリソースは「状態」が変わりうるものである。例えば「今日の天気」というリソースは、時間とともに変化してゆき、「晴れ」から「雨」、はたまた「曇り」へとその状態を変え得る。

RESTとは

RESTとは、Representational State Transferの略称。これは「HTTPとは、ハイパーテキストだけでなく、実際には『リソースの状態(Resource Dtate)』及び『リソースの表現(Representation)』を運んでいる」としたものである。

具体的にRESTの設計思想を列挙すると、以下のような特徴があげられる。

  1. クライアント/サーバ型 : ユーザインターフェースと、リクエストの処理を分離できる

  2. ステートレス : サーバがアプリケーションの状態を管理しないことで、実装が楽になる。これはReact.jsの設計思想とも似てるね(コンポネント/コンテナの関係性とか)

  3. キャッシュ : 通信を減らすことで、サーバの負荷を軽減。やりすぎると情報の信頼性が下がる。

  4. 統一インターフェース : インターフェースを統一する(HTTPのメソッドは8種類のみ)ことで、クライアントとサーバの実装がより独立性を高められる(=相手のことを意識しなくてよい)。

  5. 階層化システム : ロード(Load)バランサやプロキシを間に挟んで負荷分散を行う(これだけじゃないけど)。インターフェースが統一されているからこそできる。

  6. コードオンデマンド : プログラムコードをサーバからダウンロードし、クライアント側で実行すること。

なんだかどれも分散システムの授業でやったことと同じだった。コードオンデマンドもコードマイグレーションの一種と考えられる。
このように設計することで、リソース同士繋がりあったハイパーリンクが成り立ち、大規模分散システムのwebを構築できるのだ。


GraphQLとは?

...

ブログ執筆欲を強制的に向上させるため、近日中にブログを書くことを宣言します…。