URIについてちょっと知ろう

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の構文はあまり見慣れないものなので、初見ではなんだこれ?となるかもしれません。

URNとは - IT用語辞典 Weblio辞書

URIとは

URI は「Uniform Resource Identifier」の略です。それが一体どんなものなのかということですが、yahooのURIを見てみましょう。

https://www.yahoo.co.jp/

このURIURIスキームとホスト名で構成されていますね。

  • 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触ったことないなあ。

CGI(シー ジー アイ)とは - コトバンク

そのサービスのログインのURIが以下のようだったとしたら。

http://example.jp/cgi-bin/login.pl

一見ありそうだけど、今ではPHPRubyWebサービスが作られることが多いので、確かにこのURLはそぐわないかもしれない。当時はよくてもリニューアルしてRubyで書きます!とかなったら面倒ですしね。

メソッド名を含めない

http://http://examp;e.jp/Login.do?action=showPage

action=showPageのshowPageはメソッド名ですね。なんかありそうな気もしますが、メソッド名変わったらURIも変わってしまうからあかんですね。

URIは名詞にしよう

URIとはそもそも何を示すのかっていうことを考えると、それはリソースです。リソースを示すのであれば、それは名詞であるべきです。 でも、以前のRailsではこんなURIがあったらしい。

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

なんか良さそうな感じもするけど、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)

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