Webは「URIで名前をつけたリソースを、HTTPでやりとりし、ハイパーリンクで結ぶ」巨大な分散システム。この3つの約束事がWebを大規模でも動かしている。
Webを支える中心の技術は3つです。URIはリソース(情報やモノ)に世界中で一意な名前をつけ、HTTPはそのリソースを取得・操作するための決まった手順を定め、HTMLなどのハイパーメディアはリソース同士をリンクで結びます。どのサーバーもどのクライアントも同じ約束事に従うので、間にプロキシやCDNを挟んだり、サーバーを増やしたりしても全体が動き続けます。
山本陽平『Webを支える技術』は、この3つとRESTを、仕様と設計の両面から解説した定番の本です。おおまかな構成と、SREとして特に押さえたい点を対応させると次のとおりです。
| 本の構成(おおまかな流れ) | 主な内容 | SREとして押さえたい点 | このノートの該当箇所 |
|---|---|---|---|
| 第1部 Web概論 | Webとは何か、歴史、REST | ステートレスとキャッシュが、スケールアウトとCDNの土台になっている | REST |
| 第2部 URI | URIの仕様、良いURIの設計 | URIの部品とオリジン、変わらないURI、URIを変えるときのリダイレクト | URI |
| 第3部 HTTP | HTTPの基本、メソッド、ステータスコード、ヘッダ | 冪等性とリトライ、5xxの見分け方、キャッシュ・認証・中継のヘッダ | HTTPの基本〜条件付きリクエスト |
| 第4部 ハイパーメディアフォーマット | HTML、microformats、Atom、JSON | APIの多くはJSON。Content-Typeとエラー本文の形をそろえる | Web APIの設計 |
| 第5部 Webサービスの設計 | 読み取り専用・書き込み可能なサービスの設計、リソースの設計 | リソースとURIの切り方、エラーの設計、一覧の取得方法 | Web APIの設計 |
本が書かれた後に広く使われるようになったもの(HTTP/2・HTTP/3、OAuth 2.0とOpenID Connect、JWT、GraphQLとgRPC、WebSocket、CORS、セキュリティヘッダなど)も、SREの実務では欠かせないので、この章で合わせて扱います。
面接ではこう答える
Webは、URIでリソースに名前をつけ、HTTPで取得・操作し、ハイパーリンクで結ぶ分散システムです。全員が同じ約束事に従うので、プロキシやCDNを間に挟んだり、サーバーを増やしたりしても動き続けます。その設計思想をまとめたのがRESTです。
SREとの関わりWebの仕組みを原理から説明できると、障害の切り分けやAPI設計のレビューで説得力が増します。