URIを変わりにくくする
Webはハイバーメディアシステム(ハイパーメディア:グラフィックス、音声、動画、テキスト、ハイパーリンクなどを絡み合わせた情報媒体)であり、リンク切れを起こすと、システムとして機能できなくなる。よって、『URIは変わらないべきである。変わらないURIこそが最上のURI』という主張がある。
じゃあ、『どういう観点が大事か🤔』となるので、その辺をまとめる。
プログラミング言語に依存した拡張子やパスを含めない
具体的には次のようなURIにしない。
http://example.jp/cgi-bin/login.pl http://example.jp/servlet/LoginServelt
良くない点と理由をまとめる。
良くない点 | 理由 |
---|---|
cgi-bin |
CGIはWebサーバ上でプログラムを動かすための仕組みだが、時代の流れで使われることが少なくなると、名前修正が必要になる |
.pl |
Webサービスの言語は多々あり、メンテナンス性及び可読性を考えると、無い方が効率が良い |
servlet |
システムをサーブレット からPHP に変えるとURIも変更になってしまう |
LoginServlet |
大文字小文字文化は実装言語によって異なり、誤解を与えてしまう |
メソッド名やセッションIDを含めない
具体的には次のようなURIにしない。
http://example.jp/Login.do?action=showPage http://example.jp/home.jsp?jsessionid=12345
良くない点と理由をまとめる。
良くない点 | 理由 |
---|---|
showPage |
メソッド名がURIに含まれると、リファクタリング時にメソッド名が変更されると、URIが変わる |
jsessionid=~ |
CookieではなくセッションIDをURIに埋め込んでしまうと、ログインの度にURIが変わる |
URIリソースは表現を名詞にする
具体的には次のようなURIにしない。
http://example.jp/sample/people/123
理由は、あるリソースを取得するか更新するかは、URIで指定するのではなく、『URIに適応するHTTPメソッド』で決定する。つまり、URIとHTTPメソッドの関係は『名詞(URI)と動詞(HTTP)』となる。もう少し補足すると、URIは『何を』意味し、HTTPは『どうする(GET
orPOST
...)』みたいなイメージ。
リダイレクトとは
『URIに変更したい時にどうするか』という問いに対しては、できるだけ『リダイレクト』を使うようにする。リダイレクトは、古いURIに転送するためのHTTPの仕組みのこと。ページを移動もしくはリネームするような時にとても大事。
URI設計のテクニック
拡張子で表現を指定する
URI設計において拡張子は良くないと上の例にもあるが、それは実装に依存するような場合で、次のようなパターンの時には良いとのこと。
項目名 | 説明 |
---|---|
コンテントネゴシエーション | クライアントがAcccept-Language ヘッダでリクエストする言語設定を指定し、サーバからリクエストした表現を返してもらう。 |
言語を指定する拡張子 | http://**/hoge.ja やhttp://**/hoge.en といった形でリソースの言語を明示的に指定する。コンテントネゴシエーションはブラウザ設定を変更する必要があるがこっちはない。 |
マトリクスURI
階層構造で表現しにくいURIを表現する際に用いる。例えば地図サービスの緯度(lat)、経度(lng)を指定するようなURIは次のようになる。
http://example.jp/map/lat=35.705471;lag=139.751898
一般的に、マトリクスURIを表現する際には、パラメータの順序が意味を持たない場合セミコロン、意味を持つ場合カンマを用いる。よって、上のURIを順序で示す場合には下のようなURIになる。
http://example.jp/map/35.705471,139.751898