Webを支える技術 ── HTTP,URI,HTML,そしてREST
はじめに
「シンプルさは究極の洗練である。
── Leonardo da Vinci」
Leonardo da Vinci(レオナルド・ダ・ヴィンチ)のこの言葉を知ったとき,筆者は真っ先にWebのことを思い浮かべました。Webの特徴を一言で言い表すならば,シンプルさに尽きると常々考えていたからです。
筆者がWebを初めて知ったのは1994年の年末です。当時創刊したばかりの『インターネットマガジン』や日本語版の『WIRED』といった雑誌で,新技術としてWebが紹介されていたことがきっかけでした。年明けすぐに大学の情報処理センターに行き,ブラウザ(Mosaic)に触れました。世界中のサーバから簡単に情報が得られ,HTMLを記述すれば自分で情報を発信できることに興奮した筆者は,すぐにWebにのめり込み,今ではWebの本を書くまでになりました。
システムとしてのWebの構造や設計思想,いわゆるアーキテクチャは初期からほとんど変わっていません。最初のWebブラウザと現在のWebブラウザでは実現している機能に雲泥の差がありますが,使っているプロトコルは依然としてHTTPですし,表示しているのは昔も今もHTMLです。Webが誕生してから20年,常に新しい技術が生まれてきました。しかしその基本となるアーキテクチャは同じです。これはアーキテクチャの完成度がとても高いことを示しています。
Webのアーキテクチャの完成度が高いことは,多種多様なWebサービスのデータを自由に簡単に扱えることからもわかります。Webサービスでは,Amazonにある書影をブログで引用したり,ブックマークサービスが提供するブックマーク数をWebページに表示したり,地図をWebページに埋め込んだりといったことが簡単に実現できます。APIを使えば,それらのデータを加工することも簡単です。
しかし一方で,簡単に接続できなかったり,データを活用するのに特殊なノウハウが必要だったりするWebサービスも存在します。簡単に接続できるWebサービスと,接続するのが難しいWebサービスとの違いはどこにあるのでしょうか。
その答えは「Webらしい設計」にある,と筆者は考えています。サービスをWebらしく作ると,ほかのシステムと簡単に連携でき,将来の拡張も楽になるのです。良い設計のWebサービスは,Web全体のアーキテクチャと調和しています。Webらしい良い設計をするためには,Webのアーキテクチャを理解して意識することが大切です。
本書は,WebサービスをいかにWebらしく設計するかをテーマとしています。クライアントとサーバはどのように役割分担するのか,望ましいURIとはどのようなものか,HTTPメソッドはどのように使い分けるのか。Webサービスにおけるこれらの設計課題について,現時点でのベストプラクティスを紹介します。このテーマを実現するために,本書は次の2つの目的を持って執筆しました。
1つめの目的は,HTTPとURI,そして各種ハイパーメディアフォーマットの仕様を解説することです。仕様を知ることは良いWebサービスの設計への第一歩です。ただし,仕様を知るだけでは良い設計はできません。Webらしさは,それらの仕様が持つアーキテクチャ的裏付けに基づいているからです。本書ではHTTPやURIがなぜこのような仕様になっているのかについても,Webのアーキテクチャの観点から解説しました。
2つめの目的は,Webサービスの具体的な設計方法を示すことです。設計とはシステム全体のバランスをとる作業です。システム全体についての深い知識が必要ですので,設計のスキルは一朝一夕に身につくものではありません。そこで,本書ではまずは良い設計とは何かについて意識してもらいたいと考え,具体的なWebサービスを題材に設計のプロセスや考え方を解説しました。
本書の対象読者は,規模の大小にかかわらずWeb技術を使ったシステムを開発した経験のある人です。本書にはプログラミング言語のコードはほとんど登場しません。なぜなら,アーキテクチャは実装よりも1段階抽象度が高い概念だからです。その代わりに登場するのが,具体的なHTTPのやりとりです。HTTPのライブラリは,ほとんどすべてのプログラミング言語で用意されています。読者のみなさんが得意な言語でどのように実装するかを想像しながら読んでいただけると,よりわかりやすくなると思います。
本書は,技術評論社の雑誌『WEB+DB PRESS』に2006年4月(Vol.32)に掲載した「RESTアーキテクチャスタイル入門」と,2007年4月(Vol.38)から2009年2月(Vol.49)まで連載した「RESTレシピ」をベースに,大幅に加筆と修正を行って執筆しました。執筆は連載終了後の2009年初頭に開始し,約1年間をかけました。
謝辞
本書を執筆するにあたっては多くの方にお世話になりました。レビューをお願いした高橋征義さん,和田卓人さん,福田朋紀さん,日野原寛さん,中川勝樹さんからは的確で精緻なご指摘をいただきました。ありがとうございます。
私のWebサービスの設計経験は,株式会社リコーでの仕事を通じて得たものばかりです。これらの経験を与えてくれた同僚のみなさんに深く感謝します。
技術評論社の稲尾尚徳さんには,『WEB+DB PRESS』での連載時から,何かと締め切りを破る筆者を時には厳しく,時には優しくサポートしていただきました。担当編集者が稲尾さんでなければ本書は書きあげられなかったと思います。本当にありがとうございました。
最後に,妻と娘には執筆期間中たくさん協力をしてもらいました。本当にありがとう。
山本陽平