Baby step - 思考と実験の足跡

日常のちょっとした、気になって試したこと集です。

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になる、と。

cf. URL と URI の違い - Qiita

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:

スキームとプロトコル

  • プロトコルとは、通信規約の総称
  • スキームとは、特定のリソースがどのようなプロトコルで提供されるべきかを表現するために URL が使用する識別子

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が自分の場合、リストを返す場合に付ける時がある

cf. はてなブログでURL最後に「 / 」(スラッシュ)を付けるべきか、付けないべきか - わたしと納豆ごはん