修行ブログ

修行メモ

【読書メモ】Webを支える技術 -HTTP、URI、HTML、そしてREST

書籍

Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus) | 山本 陽平 |本 | 通販 | Amazon

読んだ動機

AWSソリューションアーキテクト プロフェッショナル の資格勉強をしているときに、「Webについて理解すれば、AWSのことももっと理解できそう」と感じたのがきっかけ。 Webについて学べそうな本をざっと探してみたところ、本書は程よい入門性と内容の充実度のバランスがよさそうだったので購入。

概要

本書では、「Web」というとらえがたい言葉を、発達の歴史・関連用語などを一つずつほぐしながら順を追って解説していく。 HTTP、URI(あるいはURL)、HTMLなどの用語は、多くの人が意味を理解せずになんとなく触れている。 (ある意味すごいことだな。。) これらの用語を、「Web」という概念に対してどういう関係性を持つものなのか理解できる。

いくつか「覚えておこう」と感じた点を以下にまとめる。

RESTとは

ググってみてもイマイチわかったような気になれないREST。 本書の説明を読んで少し輪郭が見えてきた気がする。

RESTとは、以下の特徴を備えたWebの「アーキテクチャスタイル」のことのようだ。 必ずしもすべてを満たす必要はないが、すべてを満たす「RESTらしい」アーキテクチャのことをRESTfulと呼ばれる。

1.クライアント/サーバ型である

システムを、アプリケーション提供者としてのサーバと、受け取る側のクライアントに分けていること。 サーバとクライアントを分割することで、システム全体の柔軟性を保てる。 たとえば、アプリとしてのデータ保持や主な処理はサーバ側で実行するため、クライアント側での実装は最小限で済むことなどがある。 クライアント側での実装負荷が下がることで、クライアントをマルチデバイス化することもできる。

2.サーバがステートレスであること

ステート とはアプリケーションの状態のこと。 「ステートレスである」とは、サーバがクライアントのアプリケーション状態を保持しないことを指す。 ステートレスを保つことにより、サーバの実装はシンプルになる。 ただし、実際のWebサービスではサーバがステートフルになっているケースも多い。

3.キャッシュ機能を持つ

キャッシュとは、サーバから取得したリソースをクライアント側で保存しておくこと。 キャッシュすることで、クライアントとサーバ間の通信を減らし、サーバの負荷を下げられる。 ただし、タイミングによってはクライアントが古い情報を取得してしまう欠点もある。

4.統一インタフェースを実装している

インタフェースとは、2つの要素がお互いやり取りするための接地面のこと。 そして、「統一インタフェース」とは、その接地面でのコミュニケーション方式を統一している状態のことを指す。 たとえば、8つしかメソッドを持たないHTTPを統一インタフェースとすることで、アーキテクチャ全体がシンプルになる。

5.階層化システムである

「統一インタフェース」を実装していることの副産物にもなるのが、「システムを階層化しやすい」こと。 インタフェースが統一されていることで、接地面の実装はシンプルになる。 そこで、役割ごとにサーバを分割、つまり階層化しやすくなる。 システムを改装に分けることで、各階層ごとに拡張性を持たせることができ、無駄のないアーキテクチャとしやすい。

6.コードオンデマンド

サーバ側から提供されたプログラムを、クライアント側で実行すること。 クライアント側での機能拡張が行いやすくなる。 ただし欠点として、サーバからクライアントへの通信におけるプロトコルの可視性が落ちることがある。

WebサービスとWeb API

この2つの用語を分けて認識しておくことは重要。 APIとは、プログラムからアプリケーションを利用するためのインタフェースのこと。

Webサービスとは、私たちが普段利用するWebアプリケーションを指している。つまりWeb利用における「人間用」の利用画面というところ。 Web APIとは、プログラムがWebアプリを利用するためのインタフェースのこと。つまりWeb利用における「プログラム用」の利用画面。

感想

まったくの初学者にはおそらく歯ごたえがありすぎる。 「OSI参照モデルを大まかに理解してる」かつ「L7のHTTPについてもっと掘り下げたい!」という方にはちょうど良い内容かもしれない。 実際にWebサービスを自分で実装する際に参照するのもよさそうだ。