URL, URIの違いやプロトコルなどの関連用語についてまとめてみた
背景
かつて"URL"は「Web上の住所に当たるもの」という認識をしていました。 API開発をするようになり、いつからか"URI"という表現を見るようになりました。
なぜAPI開発の文脈ではURIがしばしば使われるのか? 何が違うのか?
それらを噛み砕くために、関連用語も含めてまとめてみました。
(しかしながら、概念的な話で難しい&明確な答えがないものが多く、まとまりきっていない点もあります...)
URL, URI, URLとは
URIにURLやURNが含まれる、という理解をしました。
用語 | 説明 |
---|---|
URL(Uniform Resource Localtr) | 場所を表す書き方のルール ファイルの住所のようなもの |
URN(Uniform Resource Name) | 名前を永続的に識別する書き方のルール これ単体でアクセスできるとは限らない |
URI(Uniform Resource Indicator | 名前や場所を識別する書き方のルールの総称 |
cf:
具体例
- アドレスはURL
- メールアドレスもURL
どちらも「アドレス」= 場所を表しているのでURLになる、と。
URI, リソース, エンドポイントとは
オブジェクトやエンティティを表すリソースの識別子がURIであり、HTTPメソッドでリソースを操作する、というイメージでしょうか。
用語 | 説明 |
---|---|
リソース | オブジェクトまたはエンティティ |
URI | リソースを表す一意の識別子 |
エンドポイント | HTTPメソッドとURIの組み合わせ |
cf:
*SPA開発におけるWeb API設計入門(エンドポイント編) | Hypertext Candy * Web API 設計の基本を学ぶ(APIエンドポイント) - Qiita
URIを分解する
ここからはだいぶ具体的な話になります。
概要
foo://example.com:8042/over/there?name=ferret#nose
というURIを例にします。
この時、それぞれ以下のような名前となります。
foo # scheme(スキーム) : # 区切り文字 //example.com:8042 # authority - example.com # host - :8042 # port // 省略すると80番 /over/there # path ?name=ferret&owner=john # query #nose # fragment
cf. Uniform Resource Identifier (URI): 一般的構文
scheme(スキーム)とは
- 通信手段を表すもの
- 基本的に小文字だが、大文字も受け入れる
- スキーマ(schema)と混同されやすいが別物
具体的にはhttp, https, ftp, file
などがスキームにあたります。
cf:
スキームとプロトコル
cf: Whats the difference between a scheme and a protocol in a URL? - Stack Overflow
多くのschemeには対応するプロトコルが存在する(が、対応しないものもある)
cf. URL プロトコル
余談集
二重スラッシュにはなんの意味がある?
- authority部の開始を表すもの
- 作者は「いま思うと無意味」と言っている
cf. WWWの生みの親ティム・バーナーズ・リー氏が今、後悔していること - ZDNet Japan
三重スラッシュにはなんの意味があるの?
file
は、ホストコンピュータ上でアクセス可能なファイルを示すスキーム- ローカルPCの場合はhostを省略できる // RFC1738(URL仕様)の3.10
file://<host>/<path>
のhostを省略した結果三重スラッシュになる- httpではhostが
localhost
であっても空文字にできない
cf. 「file:///」でスラッシュが3つ並んでいる理由: 小粋空間
URLの眩日にはスラッシュを付けるべき?
- 「トレイリングスラッシュ」という名前らしい
- 基本的にどちらでもいいが、統一したほうが良い
- 有無によりペ角ページを表示することがあるため
- REST APIでは基本的に付けない
- idが自分の場合、リストを返す場合に付ける時がある