Kaz Chocomint's

シドニーで生活しながら考えたこと、勉強していることについてまとめていくブログ

【本】"Webを支える技術"を読んでみた感想

Webを支える技術 -技術評論社- 山本陽平(著) を読みましたので、本の大まかな内容とその感想をまとめました。

f:id:etoh103:20160305121543j:plain

学んだことの振り返りも兼ねて以下、要約しました。

-1部  Web概論

 Webの定義から、簡単な歴史、その後の章に出てくる技術に関するキーワードのわかりやすくまとまっています。webの標準化に関して、アーキテクチャスタイルとは何かの説明があり、SOAPの説明を交えながら、現在一般的となったRESTと呼ばれる設計思想について解説されています。RESTとはULCDDC$SSとも表記でき、続く6種類のスタイルをまとめたものをいう。クライアント/サーバ、ステートレスサーバ、キャッシュ、統一インターフェース、階層化システム、コードオンデマンド

-2部  URI

URIの仕様についての説明から、設計について順を追って説明が続く。URIの文字はASCIIのみであり、日本ではUTF-8にするのが無難。URIとは、URLとURNの総称のこと。設計に際し、URIとHTTPメソッドが名詞と動詞の関係にあることに注目し、シンプルなURI設計を目指すべきである。URIをクライアントで組み立てたり、拡張子からリソースの内容を推測したりできないが、それをURI不透明性と呼び、これも留意しておくべき重要な特徴である。

-3部  HTTP

HTTPについて、誕生から標準化まで歴史を交えて解説が進む。現在最新のHTTP1.1。リクエストとレスポンスで成り立っており、各々のメッセージには規定の型がある。HTTPは、CRUD(Create,Read,Update,Delete)の基本機能に応じたメソッドが定義されている。GET(リソースの取得)、POST(リソースの作成と追加)、PUT(リソースの更新と作成)、DELETE(リソースの削除)、HEAD(リソースのヘッドの取得)、OPTIONS(サポートしているメソッドの取得)
これらに対しては、べき等性(何回実行しても結果が同じ)と安全性(実行によりリソースの状態が変化しない)という性質で各々の特徴を説明できる。
レスポンス時に状態を伝えるステータスコードが定義されており、3桁の数字で表される。(1XX 処理中 2XX 成功 3XX リダイレクト 4XX クライアントエラー 5XX サーバーエラー)
HTTPにはヘッダがあり、日時、MIMEメディアタイプ、コンテントネゴシエーション(クライアントがサーバに伝えて決定する)といった情報を付与する。後者の例としては、Acceptヘッダ(処理できるメディアタイプをサーバに伝える)、Content-Lengthヘッダ(ボディの長さを指定する)などがある。
HTTPの認証方式には、主にBasic認証とDigest認証がある。Basic認証はユーザ名とパスワードによる方式、Digest認証はBasicn認証よりセキュアで、ダイジェストと呼ばれる固有の情報(ユーザー名やパスワード以外にもタイムスタンプ、nonceの送信回数やqop値など)を作成して利用する。クライアントから見た操作の手軽さから、いまはBasic認証が一般的で、セキュリティを高めたい場合は、SSLTLSを使ってHTTPS通信し、通信路上で暗号化する方法が主流である。
クライアント側でリソースを確保し、同一URIへの複数回アクセスによる通信コストを下げる方法としてキャッシュという機能がある。キャッシュ用のヘッダを利用して、制限や抑制が可能である。

-4部  ハイパーメディアフォーマット

タグで文書の構造を表現するマークアップ言語であるHTMLについて、その元となったXMLの構造から始めて、構成要素の各説明が続く。HTMLにより意味を持たせるためにメタデータを埋め込むmicroformatについて解説がある。
XMLのフォーマットのATOMは主にフィードとして利用されるが、WebAPIとしても利用できる。またAtomPub(Atom Publishing Protocol)とは、タイトルや更新日時といった基本的なメタデータをもったリソースであるエントリをCRUDするWebAPIのためのプロトコルで、フレームワークあやライブラリが充実しているため利用価値が高い。
JSONは軽量なデータ記述言語で、プログラミング言語間でデータを受け渡せたり、JSONPと利用してクロスドメイン通信(複数ドメインのサーバと通信する)が可能なのが特徴である。

-5部  Webサービスの設計

どのようにリソースを分割し、相互にリンクをどう繋げるかを決めていくのがリソース設計であり、一つにリソース指向アーキテクチャという方法がある。大まかには、
1提供したいデータを特定、2データをリソースに分ける、3リソースにURIの名前を決定4リソース表現の設計、5リンクとフォームでリソース同士を結びつけ、6イベントの標準的なコースを検討、7エラーについて検討
という流れで開発する。1と2について関係モデルのER図を作成しての導出、オブジェクト指向モデルのクラス図から、情報アーキテクチャからの導出などが方法としてある。情報アーキテクチャはリソース指向アーキテクチャと相性が良い。

-以上


読了後の感想ですが、全体的に非常にわかりやすく書かれており、読み切ることは簡単でした。3部くらいまではいままで聞いたことも多い内容だったのですが、きちんとまとまっているため、網羅した感じで復習ができました。4部以降、ATOMmicroformatなどなじみのないものについては、説明を読んでも利用状況を想像できないので理解しずらかったです。フォーマットや定義などは、実際に手を動かして使ってみてより理解が深まると思いました。
また、最終5部のwebサービスについては実際に設計をしたことがないものの、大まかな主流の考え方や、取り組む方法が実例を交えて解説されているので、何度も読み返すことになりそうだと思いました。総じて、開発の方法まで一通り平易な記述で網羅されており、買ってよかった本でした。なお、5部以降にも50ページほどステータスコード一覧や参考文献が付録として乗っており、その点も有用だなと感じました。

Webについて歴史を交えて、簡単にHTTPなどの技術を知りたい方にはもってこいの本だと思います。webでの評価も高めですが、私もその通りだと感じました。