Webを支える各種技術の設計作法

Webを支える技術を読みました。
「Webを支える各種技術(URI、HTTP、ハイパーメディアフォーマット)の設計作法」という観点から学んだことをまとめようと思います。

URIの設計作法

シンプルなURIにする

シンプルなURIにすると、変わりにくいURIとなる。本著で例にあげられていたのが下記のURI

シンプルでないURIhttp://example.jp/cgi-bin/login.pl
シンプルなURI  :http://example.jp/login

シンプルなURIにする上で注意する点は、下記3点とのこと。

また、シンプルなURIにすることで、ユーザビリティも高まる。URIを覚えやすくなり、ブラウザのアドレス欄に直打ちする際も入力しやすくなる。

拡張子で表現を指定する

プログラミング言語に依存した拡張子は悪であるが、リソースの表現を特定するための拡張子は良い側面を持つ場合もある。例は以下の通り。

プレスリリースを複数の言語で記述したい場合
(日本語版)http://example.jp/2010/05/01/press.ja
英語版) http://example.jp/2010/05/01/press.en

クライアントアプリケーションを作る際は、URIが不透明であることを心がける

クライアントアプリケーション側は、サーバー側が提供するURIをそのまま扱うだけ。クライアント側でURIを推測してはいけない。例えば、上のプレスリリースの例では、「(フランス語版)http://example.jp/2010/05/01/press.fr」といったURIをサーバー側からは提供されていないが勝手に推測して、そのURIを元に構築してはいけない。

HTTPの設計作法

HTTPメソッドを正しく使う

主なHTTPメソッドの性質は下記の通り。

メソッド 性質
GET べき等かつ安全
PUT、DELETE べき等だが安全でない
POST べき等でも安全でもない

べき等とは、「ある操作を何回行っても結果が同じ」こと。
安全とは「操作対象のリソースの状態を変化させない」こと。

例えば、GETメソッドでリソースを削除するリクエストを送ってしまうと、安全ではなくなってしまう。

GET /resources/1/delete HTTP/1.1
Host: example.jp

ステータスコードを正しく使う

ステータスコードは、下記のように大きく5つに分類できる。

ステータスコード 意味
1xx 処理中
2xx 成功
3xx リダイレクト
4xx クライアントエラー
5xx サーバエラー

例えば、リクエスト成功時は「200」を返し、リソースが見つからない場合は「404」を返す。

HTTPヘッダを活用する

以下は、HTTPヘッダの一例。

HTTPヘッダ 内容
Set-Cookie セッション情報などをサーバー側からクライアントに設定するときに利用する
Cookie Set-Cookieヘッダで指定されたCookie情報を示す
Content-Type ボディのメディアタイプを示す
Cache-Control クライアントとサーバが従うべきキャッシュ方法を示す
Authorization 認証する際に、認証情報を示す

ハイパーメディアフォーマットの設計作法

Webサービスの特性に合わせて、データフォーマットを選ぶ

本著で紹介されていた5つのフォーマットと、それらの特徴は下記の通り。

フォーマット 特徴
HTML シンプルなハイパーメディアを表現するためのフォーマット
microformats 既存のWebページをそのままWebAPIとして提供できる
Atom タイトル、著者、更新日時といった基本的なメタデータを備えたリソース表現のためのフォーマット
Atom Publishing Protocol タイトルや更新日時といった基本的なメタデータを持ったリソースであるエントリをCRUDするWebAPIのためのプロトコル
JSON データ記述に適したフォーマット

所感

本著を読んで、Webを支える技術の全体像と、各種技術を使う上での作法を知ることができました。今後はこれらの知識を活かし、さらに、個人的に大切にしている「Simple is best」という方針を元に、シンプルな設計を行うことを心がけていきたいです。

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

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