「Webを支える技術」(2010)を読んで【URI・HTTP】

はじめに

Web系の勉強をしてますが、もう少しWeb技術への基礎理解が欲しいので以下の本を読みました。
新しい技術が誕生するにせよ、RESTのような根幹の技術は変わりません。むしろWebの世界で統一化された規約(REST)を押させておこうと思いました。
ysk-pro.hatenablog.com

Webを支える技術をざっと読んだ内容

  • Web技術に関する背景
  • URI(リソース識別子)
  • HTTP(Protocol)
  • HTML(Hyper Media Format)
  • WebAPIの設計

知識の穴を今回はまとめていきます。

REST

REST(REpresentational State Transfer)とはWebにおける設計思想であるArchitecture Styleです。RESTなサービスとは「サービスのURIに対してHTTPメソッドでアクセスする事で情報(リソース)をHTML形式で取得する」考えが根底にあります。Webとは無数のWebサービスが存在しており、個別のWebサービスが全体を構築しています。個別のwebサービスが好き勝手に全体の調和を乱さないよう、あらかじめREST(規律・約束)を設けて、全体として統一させています。

qiita.com

REST = ULCODC$SS

クライアント/サーバ

最も有名なアーキテクチャスタイル。ユーザーインターフェースを担当するクライアントがサーバにリクエストを送り、サーバがデータストレージからデータを取得し、レスポンスを返します。

ステートレスサーバ

サーバがクライアントのセッション状態を保持していない事です。サーバ側の実装が簡略化され計算コストの省力化が利点。

  • キャッシュ(一度取得したリソースをクライアント側が保持)
  • 統一インターフェース(情報操作を全てHTTPメソッド(GET, POSTとか...)として統一する)
  • コードオンデマンド(サーバからプログラムをクライアント(JavaScriptが多め)にダウンロード)
  • 階層型(システムの階層化(負荷分散やプロキシの配置が該当))
  • 接続性(Web上のリソースを固有のURIで辿れる)

URI

URIは先ほどのWeb上に存在するリソースを識別するIDです。以下のような構成となっています。

URIスキーム・ユーザ情報・ホスト名・ポート番号:8000・パス・クエリ(q=test&debug=true(検索ワードとか))・URIフラグメント:#n10(HTMLのID属性の指定)

90年代後半頃はリンク切れが問題になっていたらしく、長く保てるURIについて議論されていたみたいです。現在だと当たり前の話ですが、URIにセッションIDやプログラミング言語に依存したワードを使用しない事が重要とされています。

詳細については以下の記事にてまとめてくれています。
reboot00.com

HTTP

HTTPのステートレス性

ステートレス性ではサーバがクライアントのアプリケーション状態を保存しておらず、リクエスト時にクライアントが全ての情報を送信しなければならない為、ステートフルと比べて簡潔性・冗長性によるデータ量の増加、負荷に欠点があります。

ログイン〜ログアウトの間の状態をセッション状態と呼びますが、これはステートフルが前提となっています。セッション状態では各サーバがクライアントの状態を管理しておく必要があります。クライアント数が増加した際に、各サーバには同時に相手にできるクライアント数には限界があります。サーバ台数が徐々に増加していき、スケールアウトしにくいシステム構成となります。

ステートレス性ではクライアントが自らのセッション状態を覚える為、サーバが各クライアントのセッション状態を覚える必要がなく、リクエスト処理に集中できます。

HTTPヘッダ

サーバやクライアントはメッセージのヘッダ部分を見てメッセージに対する挙動を決定します。
HTTPヘッダにはいくつか種類があります。

  • MIMEメディアタイプ(リソースの表現の種類 / text , image, video ...)
  • コンテントネゴシエーション(クライアント側が処理できる表現をサーバ側が考慮)

あとはチャンク・認証方式・キャッシュ・KeepAlive(リクエスト毎にTCP接続を切断しなくて済む)などです。

HTML

XMLとHTMLは異なります。XMLは<>で囲まれたタグに修飾情報を与えることによって、データの意味が分かりやすく、可読性が向上します。タグの要素名とデータの管理はXML文書内で記述します。
hnavi.co.jp

JSON

プログラミング言語から扱いやすいデータ構造であるため、JavaScriptで実行できること+冗長性が低いことからAjax通信におけるデータフォーマットとして活用されています。

JSONPによるクロスドメイン通信

Ajaxで用いるXMLHttpRequestでは不特定多数のサーバへのアクセス(=クロスドメイン通信)がセキュリティ上制限されています。代替手段としてJSONPを活用することでクロスドメイン通信を可能にしています。

感想

本を一から読むよりもまとめた記事をざっと眺める方が効率良いかもね。
ysk-pro.hatenablog.com