前回は、リソースを統一的に識別するIDである、URIの仕様についてまとめた。しかし、そもそも良いURIとは何か、良いURIを設計するにはどうすればいいのだろうか。ここでは、「クールなURIは変わらない」と言われるURIの設計について解説する。
1 クールなURIは変わらない
良いURIやきれいなURIのことを「クールURI」(Cool URI)と呼ぶ。この起源は、Webの発明者Tim Berners-Leeが1998年に発表した「Cool URIs don’t change」(クールなURIは変わらない)というWebページである。
このWebページが発表された当時、URIが変更になることは日常茶飯事だった。これは、リンクでつながっているというWebの根幹を揺るがす問題であった。Berners-Leeはこの状況を憂慮し、「URIは変わらないべきである。変わらないURIこそが最上のURIである」という主張をクールURIという言葉に込めたのである。
2 URIを変わりにくくするためには
プログラミング言語に依存した拡張子やパスを含めない
まずすべきことは、プログラミング言語に依存した部分の排除である。例えば、「cgi-bin」(Common Gateway Interface,CGI)というパスや「.pl」(Perl)という拡張子、そして「servlet」や「LoginServlet」(Java)である。
メソッド名やセッションIDを含めない
また、メソッド名やセッションIDを含めないこと。例えば、「showPage」(Struts)や「jsessionid」(Java)である。
URIはリソースを実現する名詞にする
さらに、URIはリソースの名前であるから名詞であるべきである。例えば、初期のRuby on RailsにおけるURIに含まれた「show(メソッド)」がある。
URIの設計指針
これらのことをまとめた設計指針は、以下の5つである。
- URIにプログラミング言語依存の拡張子を利用しない(.pl、.rb、.do、.jspなど)
- URIに実装依存のパス名を利用しない(cgi-bin、servletなど)
- URIにプログラミング言語のメソッド名を利用しない
- URIにセッションIDを含めない
- URIはそのリソースを表現する名詞である
3 URIのユーザビリティ
シンプルなURIにはユーザビリティが高まる効果もある。つまり、シンプルであれば覚えやすく、開発者でない普通の人にも使いやすいURIになるのである。
4 URIを変更したいとき
どうしてもURIを変更したいときには、できる限りリダイレクト(Redirect)するべきである。リダイレクトとは、古いURIを新しいURIに転送するHTTPのしくみのことである(レスポンスメッセージの意味を伝える数字 ステータスコードを参照)。例えばApacheであれば、mod_rewriteなどのモジュールを使うと古いURIを新しいURIにリダイレクトできる。
5 URI設計のテクニック
拡張子で表現を指定する
拡張子はURI設計にとって役立つ側面もある。それは、リソースの表現を特定する使い方をすることができる。例として、プレスリリースをWebで公開するケースを考える。
コンテントネゴシエーション
HTTPにはコンテントネゴシエーション(Content Negotiation)という便利な機能がある。これは、日本語版のOSを使っているユーザには日本語を、英語版のOSを使っているユーザには英語を返せるというものである。例えば、Accept-Languageヘッダでクライアントが所望する言語を指定できたり、Accept-Charsetヘッダで文字エンコーディングを指定したりできる。
言語を指定する拡張子
1つのリソースが複数の表現を持つとき、個々のリソース表現を示すURIに「.ja」のような拡張子を使ってもよい。これはW3Cのサイトでも実践しているテクニックである。
マトリクスURI
マトリクスURI(Matrix URI)は、複数のパラメータの組み合わせを表現するリソースの場合に用いる。URIはスラッシュ(/)を使って階層を表現できるが(例えば日付など)、地図などの複数のパラメータ(緯度と経度、表示スケールなど)を持つ情報は階層で表現することはできない。その場合、スラッシュの代わりにセミコロン(;)で区切ってリソースを表現する。現在はカンマ(,)が使われており、セミコロンがパラメータの順序が意味を持たない場合に、カンマはパラメータの順序が意味を持つ場合に使う。
6 URIの不透明性
URIの不透明性(Opaque)とは、URIをクライアント側で組み立てたり、拡張子からリソースの内容を推測したりできないことをさす。クライアントを作る際は、URIが不透明であることを心がけなければならない。なぜなら、サーバ側の実装でURIの構造を変更したとたんにシステムが動かなくなってしまうからである(密結合状態)。
7 URIを強く意識する
URIは、WebサービスやWeb APIの設計において最も重視すべきパーツである。その理由は、URIが、1)リソースの名前である、2)寿命が長い、3)ブラウザがアドレス欄に表示するからである。
最後に
まず、URIが変わるとリンク切れを起こす可能性が高い。そのため変わりにくいURIを設計する必要がある。変わりにくいURIを設計するためには、5つの設計指針を守ることが求められる。また、URI設計のテクニックを使うことやURIの不透明性を保つ必要がある。このように留意点は多いが、URIを強く意識することで、ユーザビリティも向上させることができ、さらに保守性も高めることができるのである。
次回は、TCP/IPをベースとしたプロトコルであるHTTPの基本について説明する。
![]() |