kuwana-kbの開発/学習ブログ

プログラミング、クラウドインフラのWeb開発/学習ブログ

「Webを支える技術」 書評

こんばんは、kuwana-kbです。

以前読んだ「Goプログラミング実践入門」という本で、RESTfulAPIを作ってみよう!という項目がありました。私の中でRESTとは「何回か調べたことはあるけど、あんまり頭の中に入っていない…」そんな用語でした。せっかく作ったのに中身をよく理解できていないのは大変もったいないです。

ということで、今回は「Webを支える技術 HTTP, URI, HTMLそしてREST」を読んでみました。 RESTとはなにか?に加えてHTTP、URIのおさらいもしてきましたので、書評としてまとめます。

Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus)

Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus)

ざっくりと3行でいうと

  • なんとなく理解していたHTTP, URI, RESTを体系的に理解できる
  • アーキテクチャスタイルという言葉を初めて知る
  • 情報が古い部分もあるからこれ一冊で完璧、とはいえない

この本の紹介

この本は、HTTP, URI, HTML といった今のWebを支える代表的な技術に焦点を置いた解説書です。 上述した技術について、歴史的な成り立ちや具体的な仕様について解説し、最終的にはWebサービスを設計する際の指針を説いてくれます。

では、次に各部のざっくりとした紹介です。

第1部 Web概論

まず最初は、普段我々が何気なく使用しているWebに関する解説から始まります。 具体的には、現在のWebの範囲とは何か、Webにはどういった歴史的背景があったか、Webを成功へ導いたREST*1とはなにか、といった内容になります。 「ベンダー同士の利権の話」や「一人の技術者によって今のHTTPの原型となる仕様が提案された話」は、世界史の授業を聞いているようで面白かったですよ。

第2部 URI

この部は、URIの仕様と設計についてのお話です。 設計の章に、Webの開発者である Tim BL氏の「Cool URIs don't change」という言葉が登場するのですが、シンプルでわかりやすい指針だと感じました。 この言葉が出てから既に20年以上経過していますが、原則というのは時を経ても変わらないものですね。

第3部 HTTP

第3部はHTTPについての部です。 この部ではHTTPの仕様とWebサービスを設計する際にHTTPをどう扱うべきかについて解説されています。 初めて知るステータスコードが意外とあったのが印象的でした。

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

第4部では、HTML, xml, atom, JSON といったフォーマットについて解説されています。 フォーマットの書き方のお話がメインなので、あまり目新しい情報はなかったように思えます。

第5部 Webサービスの設計

最後の第5部は、これまでの部で扱った「HTTP, URI, フォーマット」を用いて、どのようにWebサービスを設計するかについてのお話です。 関係モデルのER図、オブジェクト指向のクラス図、情報アーキテクチャの3種類の成果物からリソースの設計を試みます。

この本のポイント

HTTP, URIを振り返ろう

WebエンジニアにとってHTTPとURIって当たり前の存在だと思います。 curlでリクエストを投げたり、WebAPIを実装してレスポンスを確認したりする中で、日々触れ合いますよね。 上記のような経験の中でなんとなく覚えたもの、という人もいるんじゃないでしょうか。 私の場合は、この3ヶ月間開発を繰り返す中で「あ〜またこのHTTPヘッダか〜」という具合に徐々に覚えてきました。

本書ではHTTPとURIについて体系的に解説されています。 ある程度プログラミングを覚えてきた人にとっては、一度体系的に整理するのにちょうど良い書籍だと思います。(私にはちょうど良かった!)

アーキテクチャスタイルとしてのREST

本書には、「RESTは複数のアーキテクチャスタイルを組み合わせて構築した複合アーキテクチャスタイルである。」という記述があります。 そもそもアーキテクチャスタイル*2ってなに…?って感じだったんですが、意外と身近な仕組みがそう呼ばれていました。 例えば「クライアント/サーバ」や「キャッシュ」の仕組みです。 「アレってそういう枠組みの言葉なんだ!」とちょっと驚きました。

アーキテクチャスタイルは以下のように実装から二段階抽象化した概念を指すとのことです。*3

抽象化レベル Webでの例
アーキテクチャスタイル REST, クライアント/サーバ, キャッシュ
アーキテクチャ ブラウザ, サーバ, HTTP, URI
実装 Apache, Firefox|

RESTというのは、上記のように抽象化されたパターンの組み合わせによって、 パフォーマンス、スケーラビリティ、簡潔性、拡張性、可視性、移植性、信頼性といったメリットを実現するための設計パターンなのだと理解しました。

また、「WebそのものがRESTであり、個々のWebサービスがRESTfulになることで、Web全体がより良くなる」という記述はRESTが自己循環しているようで面白かったです。

情報が古いのが残念

本書の初版が発行されたのは2010年です。 そのため情報が古くなっている箇所が散見されます。 例えば、2015年にHTTP/2が承認されましたが、本書ではHTTP/1.1までしか解説されていません。 説明がすごく丁寧なだけに本当に残念ですね…HTTP/2の解説も読んでみたかったです。 ぜひこの内容を追記した第二版を出して頂きたいところです。 他にもメディアフォーマットとしてatomの解説が充実していますが、現在のWebの需要でいうとそこまで深く解説すべき内容には見受けられませんでした。

まとめ

「Webを支える技術」は今まで知っているようでよく分かっていなかった、そんな知識領域であるHTTP, URI, RESTをわかりやすく解説してくれる本です。

プログラミングにちょっと慣れてきた方におすすめします。寄り道のように思えるかもしれませんが、得られるものは少なくないと思いますよ。

*1:現在はRESTfulな設計が主流ではあるものの、HTTPのRESTへの評価は過大ではないか、という意見もあるようです。

*2:複数のアーキテクチャに共通する性質、様式、作法あるいは流儀をさす言葉 本文25Pより引用

*3:本文27Pより引用