バグですか?仕様ですか?筋肉です💪

筋肉とプログラミング、その他アウトプットをしていきます。

クールなURIとは

前回と引き続き

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

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

の本からURIについて書いていきます!!

この記事を読んでわかること

  • なぜ変わらないURIはクールなのか
  • 変わりにくいURIするには
  • URIを変えなくてはいけない時はどうするか

なぜ変わらないURIはクールなのか

変わらないURIがクールである

という言葉があります。なぜ変わらないURIがクールなのでしょうか?

Webはそれぞれのリソースに他のリソースが埋め込まれたハイパーメディアシステムのため、URIを変更しリンク切れを起こすと機能しなくなってしまいます。

通常ユーザは、ページにあるリンクをクリックすることで、見たいページに遷移します。 しかし、そのリンクのURIが変わってしまうとユーザはページ遷移ができなくなってしまうので、webとして機能しなくなってしまうのです。

つまり、URIは出来るだけ変わらないものが好ましい(クールである)のです。

本では主に3つ紹介されていましたので、ダメなURIを例にあげて説明していきたいと思います。

プログラミング言語に依存した拡張子やパスを含めない

http://example.jp/login.pl

例えばこのURIの場合、.plというPerlというプログラミング言語のソースに使われる拡張子が使われています。
もし仮に、PerlからRubyに言語を変えてアプリケーションを実装するとなると、URIを変更しなければなりません。 (.plでRubyスクリプトを動かすこともできますが、あまりよくはありませんよね。)

このように実装言語に依存した文字列をURIに含めてしまうと、言語を変更した際にそのURIは使えなくなってしまします。

メソッド名やセッションIDを含めない

http://eample.jp/Login.do?action=showPage

.doという拡張子も問題ですが、今回はshowPageが問題です。これはメソッドの名前なのですが、 もしリファクタリングを行なってメッソド名を変更してしまうとURIも変更になってしまいます。

セッションIDの場合、

http://example.jp/home.jsp?jsesionid=123456789

セッションIDをCookieではなくURIに埋め込むとログインのたびにセッションIDは変わるので、その度にURIも変更になってしまいます。

URIはリソースの名詞にする

http://example.jp/sample/people/show/1234

URIはリソースの名前です。なので本来名詞であるべきです。

あるリソースを取得するのか更新するのかは、URIで指定するのではなく、HTTPメソッドで決定されます。 つまりURIとHTTPメソッドは、名詞と動詞となるように設計されるべきで、showという動詞をURIに含めることはよくありません。

URIを変えないといけない時は?

変わらないURIがクールな理由と、具体的に変わりにくくするためにはどうするべきかについて書きました。

しかし、システムには変更はつきものであるように、URIも変更しなければいけない時があります。 その場合の対処法として、本では出来るだけリダイレクトをするようにと書かれていました。

リダイレクトとは、古いURIから新しいURIに転送するHTTPの仕組みで、リダイレクトしてあげればリンク切れでユーザが見たいページに遷移できなくなる心配も無くなります。