「Webを支える技術」を読んだ(/・ω・)/
「Webを支える技術 -HTTP、URI、HTML、そしてREST-」を読んだ(/・ω・)/
これまでWebサービスを使ったり、実装したりとしてきたけど、改めて体系的にWebについて勉強するといろいろ良かった。 就職前に読んでおいて良かったなーと思った。 Webサービス作り始めの頃とかに読んでおきたかった。
各章で書いてあったことと感じたことをメモしておく。 (自分のメモ書きなのでこれを読めば本一冊読んだことになる的なやつではありません)
1部
1章 Webとは何か
- さまざまなWeb
- Webサイト
- ユーザーインターフェースとしてのWeb(ルータの設定画面など)
- プログラム用APIとしてのWeb
Webっていろんなところで使われてるねって話。
2章 Webの歴史
- Web以前のインターネット・ハイパーメディアの紹介・問題点
- Webの登場と標準化の歴史
Web以前のインターネットとか知らないことが多くておもしろかった。
3章 REST - Webのアーキテクチャスタイル -
- REST = アーキテクチャスタイル
- クライアント/サーバ
- ステートレスサーバ
- キャッシュ
- 統一インターフェース
- 階層化システム
- コードオンデマンド
Web世界の秩序を守るためにもRESTfulなサービスやAPIを作ろう。
2部 URI
4章 URIの仕様
相対URIとかは気にしたことなかったので勉強になった。
5章 URIの設計
リンク先に飛んだら404とか悲しい気持ちになるし、Web的にも良くないよね。 良いURIをつけられるようになろう。
3部HTTP
6章 HTTPの基本
- TCP/IP上で動作するアプリケーション層のプロトコル
- HTTP 1.1が今広く使われている
- リクエストメッセージ
- リクエストライン
- ヘッダ
- ボディ
- レスポンスメッセージ
- ステータスライン
- ヘッダ
- ボディ
- ステートレス
- 利点:サーバはアプリケーション状態を覚える必要がない→シンプル、スケーラブル
- 欠点:パフォーマンスの低下、通信エラーへの対処
HTTPは凄いシンプルなプロトコル。だからこそここまで広く使われているんだろうなーと思った。 一方でシンプルだからこその欠点もあるのでそれは知っておく必要があるしいい勉強になった。
7章 HTTPメソッド
- 8つのメソッド
- GET、POST、PUT、DELETE、HEAD、OPTIONS、TRACE、CONNECT
- POSTとPUTの使い分け
- べき等性と安全性
- べき等 = ある操作を何回行っても結果が同じ
- 安全 = 操作対象のリソースの状態を変化させない
べき等と安全は意識しないと、使い勝手の悪いサービスを作ってしまうなーと感じた。
8章 ステータスコード
- ステータスコードの重要性
- クライアントの挙動を決める
- 間違ったステータスコードはクライアントを混乱させる
- ステータスコードは自作できる
- クライアントが未知のステータスコードを受け取った場合は、先頭数字を見て最低限の処理をおこなう
良くみるステータスコードは勝手に覚えてるけど、それ以外のものはいつかゆっくり見てみたい。
9章 HTTPヘッダ
HTTPがシンプルに設計され、かつ広く使われているのはこのヘッダが大きな役割をしてるなと感じた。 上手く使いこなせるようにまずはどんなヘッダがあるかを知らないとなーと。
4部 ハイパーメディアフォーマット
10章 HTML
HTMLの本当の基本しか書かれていなかったので知ってることが多かった。 XMLの名前空間の話とかは見たことあったけどよくわかってなかったので勉強になった。
11章 microformats
- セマンティックWeb
- セマンティクス = 意味論
- リソースが持つ意味を確定させる
- 人間が読んで解釈するだけでなくプログラムも解釈できるようにする
- 標準化済みのmicroformats(一部)
- hCalendar:イベント情報
- hCard:プロフィール情報
- rel-lisence:ライセンス情報
イベントとかよく使うものは標準化しておくとスクレイピングなどするときに統一感があって楽になるって感じなのかな。 標準化されててもそれを使うか独自実装するかは個々人の勝手やけど、標準化されたものに従えばWeb世界は整理された綺麗なところになる。 ここらへんは知ってるか知らないかで大きく変わるからいろいろ知っておきたい。
12章 Atom
- Atomの目的 = RSSの標準仕様策定
- AtomはRSS(ブログ)だけでなく検索エンジンや写真管理など様々使える
- Atomのリソースモデル
- Atomの拡張
- Atom Threading Extensions
- Atom License Extension
- Feed Paging and Archiving
- OpenSearch
RSSとかでAtomって文字は見たことあったけど、今回初めてきちんと勉強した。 拡張もいろいろされていて、広く使われているんだろうなーという印象。 便利やとは思うけどどういう時に適しているかまではわからなかったので、一回自分で書くなりして触ってみたいなと感じた。
13章 Atom Publishing Protocol
AtomのエントリーをGETとかPOSTとかできるよーぐらいの理解しかしてない。 ブログサービスとかはこういう風にして設計・実装されてるのかなーとか思った。
14章 JSON
- JSON = JavaScript Object Notation
- データ型:オブジェクト、配列、文字列、数値、ブーリアン、null
- JSONPによるクロスドメイン通信
5部 Webサービスの設計
15章 読み取り専用のWebサービスの設計
- リソース設計
- リソース指向アーキテクチャ
郵便番号検索サービスの例をあげて説明されてたのでイメージしやすくわかりやすかった。 設計に関しては場数踏むしかないのかなとは思ってるので、本に書かれていたことを意識しながらいろいろ作っていきたいなと思った。
16章 書き込み可能なWebサービスの設計
- リソースの更新
- バルクアップデート
- パーシャルアップデート
- バッチ処理
- エラーなどの情報は207 Multi-Statusで表現
- トランザクション
- トランザクションリソースの利用
- 排他制御
- 悲観的ロック
- 楽観的ロック
バッチ処理、トランザクション、排他制御まで考えて実装したことがなかったので、大規模なサービスとかエラーが許されないサービスとかだといろいろ考えないといけないんだなと感じた。 また、これらを実現するために特別なプロトコルなどは利用しておらずHTTPのみで実現されているのは凄いなと思った。 ここらへんはある程度手法が確立されていてデザインパターンみたいになっているのかなと思うので、そこらへんも勉強していかなきゃなーと感じた。
17章 リソースの設計
設計手法は様々知っていると適切なカードが切れて将来便利かもしれないと思った。