URIとは
URI(Uniform Resource Identifier)は、英語の意味の通り『リソースを統一的に識別するID』のこと。URIを使うことで、Web上に存在するすべてのリソースを一意に示せる。
URIは、URL(Uniform Resource Locator)とURN(Uniform Resource Name)を総称する名前。
URNは、ドメイン名と独立してリソースに恒久的なIDを振る。
下記の理由から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を使う方がベター。