Webを支える技術:URI概要

URIとは

URI(Uniform Resource Identifier)は、英語の意味の通り『リソースを統一的に識別するID』のこと。URIを使うことで、Web上に存在するすべてのリソースを一意に示せる。

URIは、URL(Uniform Resource Locator)とURN(Uniform Resource Name)を総称する名前。

URNは、ドメイン名と独立してリソースに恒久的なIDを振る。

image.png

下記の理由からURLが広く利用されている。

  • URNは取得できない:サーバ名やプロトコルがないので、URIとしてリソースを取得できない
  • URLが十分永続的:Webの価値向上により、リソースとURLはなるべく永続的にアクセスできるようにすべきとなったため、URNを使うまでもなくなった。

URIの構文

例えば、http://blog.example.jp/entries/1について考えると、URIを構成するパーツは次のようなものになる。

パーツ名 該当部分 説明
URIスキーム http 一般的に、そのURIが利用するプロトコルを示す
ホスト名 blog.example.jp DNSで名前解決できるドメイン名またはIPアドレスで、インターネット上で一意に定まる
パス /entries/1 階層を示すパス。そのホストの中でリソースを一意に指し示す

上記のように、インターネット上で一意になるホスト名の仕組みと、ホスト内で一意な階層的なパスを組み合わせることで、あるリソースのURIが、他のリソースと重複しないようになっている。

次のような複雑なURIを考える。

http://goruchan:pass@blog.example.jp:8000/search?q=test&debug=true#9

パーツ名 該当部分 説明
URIスキーム http 一般的に、そのURIが利用するプロトコルを示す
ユーザ情報 goruchan:pass 当該リソースにアクセスする際に利用するユーザ名とパスワードで、で区切る。
ホスト名 blog.example.jp DNSで名前解決できるドメイン名またはIPアドレスで、インターネット上で一意に定まる
ポート番号 8000 ホスト情報は『ホスト名』と『ポート番号』から構成され、:で区切る。ポート番号は、このホストにアクセスするプロトコルで用いるTCPのポート番号を示す。
パス /search 階層を示すパス。そのホストの中でリソースを一位に指し示す
クエリパラメータ search?q=test&debug=true 検索サービスに検索ワードを渡すなど、クライアントから動的にクエリ文字列を生成する時に用いる。
URIフラグメント #9 #よりも前のURIが指し示すリソース内部の、細かい部分を指定する。この例だと、ID属性がn10の要素を指す。

URIで使える文字

URIで使用できる文字列は下記の3分類で、いわゆるASCII文字。よって日本語を入れるような時には、%エンコーディングを実施する必要がある。

分類
アルファベット A-Za-z
数字 0-9
記号 -.~:`!$&'()

URI実装での注意点

WebサービスやWeb APIを実装する際のURI仕様上の注意は次の2つ。

WebサービスやWeb APIを実装する際には、なるべく絶対URIを使う方がベター。

参考