気ままに気ままのエンジニアブログ

定期的に得た知見を気ままに発信中

書籍 "Webを支える技術" 第二部 URIの要点まとめ

こんにちは。

リモートワークになり、缶ビールの減り具合が格段に増えました。

f:id:hachimaki37:20200501193019j:plain
うわぁ゛ー、尿酸値たかいどにぃ〜
どうもハチマキです。

はじめに

前回に続き、入社早々に上長から教えてもらった
エンジニアデビュー3ヶ月後くらいに読むと良さそうな書籍
「Webを支える技術 -HTTP、URI、HTML、そしてREST」の第2部のまとめになります。

一部はWeb概念についてまとめましたので、ぜひそちらもご参考にして頂ければと思います。

▼書籍はこちら
www.amazon.co.jp

本日の概要 : 第2部 URIについて

  • どんな時にために、この書籍は読んでおくべき?(第1部をご覧ください)
  • 書籍のテーマと目的(第1部をご覧ください)
  • 書籍の構成
  • 第2部 URI
    • 学んだこと
    • URIの仕様
    • 絶対URIと相対URI
    • URIで使用できる文字
    • URIの実装で気をつけること
    • クールURI
    • URLを変更した時
    • URI設計のテクニック
    • URIを強く意識する
    • 補足
  • まとめ

書籍の構成

  • 第1部 : Web概念
  • 第2部 : URI
  • 第3部 : HTTP
  • 第4部 : ハイパーメディアフォーマット
  • 第5部 : Web サービスの設計

※今回は、第2部 : URIについてまとめております。

第2部 : URI

第2部では、URIの仕様と、より良いURIを設計するための作法が書かれており、URIの仕様を正しく理解することが、使いやすいWebサービスとWeb APIを作る第一歩となる

学んだこと

普段当たり前に使用しているWebサービスURIに関して、正直考えたこともなかった。(設計思想なんて持ってのほかでした)

逆に言えば、クライアント側でURIを何も違和感なく使用できていることは、URIを設計する上でユーザビリティを考え抜いているからこそ実現できていることだと感じた。

自己アプリを制作する上で、ユーザビリティを考える一つにURIの設計思想を実現できるように考えていきたい。

そして、今までURLだと思っていた名称は、URLとURNの総称をURIと言うらしい。。学びました。

URIの仕様
  • URLの重要性
    • URIとは、「リソースを統一的に識別するID」を指し、Web上に存在するすべてのリソースを一意に示すことができる(簡単にアクセスが可能になる)
  • 簡単なURIの構文
    • URIスキーム : そのURIが利用するプロトコルを示す(http)
    • ホスト名 : 名前が解決できるドメインIPアドレスで、インターネット上で必ず一意になる
    • パス : そのホストの中でリソースを一意に指し示す(階層を表すパス)
  • 複雑なURIの構文
    • URIスキーム : そのURIが利用するプロトコルを示す(http)
    • ユーザ情報 : このリソースにアクセスする際に利用するユーザ名とパスワードから成り立つ
    • ホスト名 : 名前が解決できるドメインIPアドレスで、インターネット上で必ず一意になる
    • ポート番号 : ホストにアクセスする時にプロトコルで用いるTCPのポート番号を示す
    • パス : そのホストの中でのリソースを一意に指し示す(階層を表すパス)
    • クエリパラメータ : 1つ以上のクエリの集合を「クエリパラメータ」または「クエリ文字列」と呼び、クライアントから動的にURIを生成する時に利用する
    • URIフラグメント : その前までの文字列で表現するURIが指し示すリソース内部の、さらに細かい部分を特定する時に利用する

上記URI構文を組み合わせることで、あるリソースのURIが世界中のほかのリソースURIと絶対に重複しないようになっている

絶対URIと相対URI・・UNIXファイルと同じように階層構造を持っている
  • 絶対パス
    • ルート(URIスキーム)から記述したパスのこと
  • 相対パス
    • URIスキームやホスト名を省いて、パスだけで表現したパスのこと
URIで使用できる文字
  • アルファベット : A - Za - z
  • 数字 : 0 - 9
  • 記号 : ~.~:@!$&'()

URIには、日本語の文字を直接入れられない
※但し、%エンコーディングでその文字をエンコードすればURIが表示できる
URIの長さに制限はない

URIの実装で気をつけること
  • Webサービス、Web APIを実装する場合は、なるべく絶対URIを使うべき(クライアントにとって理解しやすいため )
クールURI・・良いURIや綺麗なURIのこと
  • URLにプログラム言語依存の拡張子を利用しない(.pl .rb .do .jsp など)
  • URI実装依存のパス名を利用しない(cgi-bin / servletなど)
    • 言語の変更と同時にそのURIが使用できなくなるため
  • URIプログラミング言語のメソッド名を利用しない
    • メソッド名を変更した途端にURIが変更になってしまうため
  • URIにセッションIDを含めない
    • URIはシステムにログインしなおすと変更するため
  • URIはそのリソースを表現する名詞である
    • URIは全体として名詞になるように設計するべき(URIとHTTPメソッドの関係は、名詞と動詞の関係にある)
URLを変更した時
  • できる限りリダイレクトするようにする(古いURIを新しいURIに転送)
URI設計のテクニック
  • 拡張子で表現を特定する
    • コンテントネゴシエーションによって、クライアントの言語設定に従って自動的に適した表現を返すことができる
  • マトリックスURI
    • 複数パラメータの組み合わせで表現するリソースには、' / 'ではなく、マトリックスURIを使う(スラッシュの代わりに、複数の軸のパラメータをそれぞれセミコロンかカンマで区切ってリソースを表現)
URIを強く意識する
  • URIはリソースの名前である
  • URIは寿命が長い
  • URIはブラウザがアドレス欄に表示する

URIは上記の点でとても重要である。

補足
  • URI / URL / URNの違い
    • URI : リソースを識別するもの
    • URL : リソースの場所を示すもの
    • URN : リソースの名前を示すもの

URIは、URLとURNを総称する名前であり、2つのID体系を合わせた総称を指す

まとめ

  • URIとは、「リソースを統一的に識別するID」を指す
  • シンプルなURIこそ、ユーザビリティが高まる
  • なるべく絶対URIを使うべき
  • リソースが何を示しているか、シンプルにわかるように設計する
  • シンプルなURIは可読性が高いため、クライアントを作る際は、URIが不透明であることを心がけ、実装していく必要がある
  • クールURIとは、シンプルなURIを指す
                                            • -

次回は、第3部 HTTPについてまとめて行きたいと思います。
以上、ハチマキでした。