URLという言葉はよく聞きますが、URIという言葉は聞いたことがあるでしょうか。URIとは、統一的に識別するIDのことでWeb上に存在するリソースを一意に示すことができます。URLも同じようなものですね、URLはURLやURNの総称です。まあ、そんなことが「Webを支える技術」に書いてあります。
今回はURIについてでも書いていこうかと。
URLとURIの違い
最初URIという言葉を聞いたとき、「え、何それURLと何が違うの?」と思ったような気がします。1文字違うだけで何か違うのだろうかと。 さっきも書きましたが、URIはURLとURNを総称する名前です。URNは、リソースにドメイン名とは別に独立した名前をつけられるやつですね。
URN (Uniform Resource Name) とはネットワーク上のリソースを、「場所」という概念に依存せず、「名前」によって永続的(persistent)に特定しようという識別子です。
URNの構文はあまり見慣れないものなので、初見ではなんだこれ?となるかもしれません。
URIとは
URI は「Uniform Resource Identifier」の略です。それが一体どんなものなのかということですが、yahooのURIを見てみましょう。
https://www.yahoo.co.jp/
URIスキームは、そのURIが使用するプロトコルを示すのが一般的で、ホスト名の部分はドメインじゃなくIPアドレスが来る場合もありますね。
もちろん、URIがもっと長くなることもあります。何か検索したときにはクエリがついて長くなったり。API作る時なんかもキーワードをクエリパラメータとして付与して情報をとってくる、なんてことをするのではないでしょうか。
yahooで検索して見るとこんな感じですね。
https://search.yahoo.co.jp/search;_ylt=A2RiWbA39uRaimsAuNqJBtF7?p=%E3%81%82%E3%81%82%E3%81%82&search.x=1&fr=top_ga1_sa&tid=top_ga1_sa&ei=UTF-8&aq=-1&oq=%E3%81%82%E3%81%82%E3%81%82&at=&aa=&ai=WLA_U52jTmOjIw.YYEa7WA&ts=1061
「あああ」と検索しただけですが、めちゃくちゃクエリパラメータが付与されていますね。&で連結されているものがクエリです。
良いURIとは
時には自分で決めることもあるURIですが、良いURIとは一体どんなURIなのでしょうか。どうやら良いURIやきれいなURIをクールURIと呼ぶそうですよ。そして、そのクールURIがどんなものかというと「変わらないURI」らしい。 URIはあまり変わるイメージないけど、まあ確かに同じリソースを示すにしてもドメイン名を変更したり、エンドポイント変更したりといった場合もあったりしますかね。
そもそもなぜ変わらないURIがクールURIなのかというと昔は、URIが変わることが割とあったらしいですね。URI変わってページ見れねえ!みたいなことは困っちゃいますよね。
言語依存の文字は含めない
言語依存ってなんだ?と思うけど、CGI時代はほとんdのWebサービスはPerlで書かれていたようですね。Perl触ったことないなあ。
そのサービスのログインのURIが以下のようだったとしたら。
一見ありそうだけど、今ではPHPやRubyでWebサービスが作られることが多いので、確かにこのURLはそぐわないかもしれない。当時はよくてもリニューアルしてRubyで書きます!とかなったら面倒ですしね。
メソッド名を含めない
action=showPageのshowPageはメソッド名ですね。なんかありそうな気もしますが、メソッド名変わったらURIも変わってしまうからあかんですね。
URIは名詞にしよう
URIとはそもそも何を示すのかっていうことを考えると、それはリソースです。リソースを示すのであれば、それは名詞であるべきです。 でも、以前のRailsではこんなURIがあったらしい。
なんか良さそうな感じもするけど、showが動詞ですね。これはURIとして適切とは言えないので、今のRailsでは改善されたらしいです。
そもそもなぜ名詞でないとダメなの?
そもそもなぜ名詞にすべきなのか?という問いに関しては、HTTPメソッドが関係してくる。GETとかPOSTとか。
対象のリソースを取得するのか更新するのか削除するのかは、URIが判断するものではなくHTTPメソッドが決めますよね。GET + URI
なら取得POST + URI
なら更新などですね。
このHTTPメソッドとURIは動詞 + 名詞の関係となるので、リソースは名詞であるべきだとか。これ初めて見たときは超納得しましたわ。
まとめ
URIを自分で設計することはあまりないけど、いざ設計する時にはどんなものが良いとされているのかは知っておきたいものです。API開発する時なんかは、いくつもエンドポイントを作ったりすると思うので、全部クールURIにするように設計したいものですね。

Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus)
- 作者: 山本陽平
- 出版社/メーカー: 技術評論社
- 発売日: 2010/04/08
- メディア: 単行本(ソフトカバー)
- 購入: 143人 クリック: 4,320回
- この商品を含むブログ (183件) を見る