30代専業主婦の独学エンジニア挑戦ブログ

実務未経験の30歳の専業主婦が独学でエンジニアを目指すブログです

「Webを支える技術」を読みました(1)

勉強記録 

今日は「Webを支える技術」を読んだので、重要そうなところを中心にまとめました。

ここでは第1部のWeb概論と、第2部のURIについてまとめています。

 

Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus)

Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus)

  • 作者:山本 陽平
  • 発売日: 2010/04/08
  • メディア: 単行本(ソフトカバー)
 

 

<第1部> Web理論

RPCとは

Remote Procedure Callの略。APIもそのひとつ。
リモートのサーバーで実行しているプログラムをクライアント側から呼び出せる。
 

RESTとは

Webのアーキテクチャスタイル。
 
-RESTとハイパーメディア
私たちがWebを使うときは、リンクを辿りながら様々なリソースへとアクセスしていく。
ハイパーメディアの基本機能であるリンクを辿るという作業をいくつか経ることで、ソーシャルブックマークという1つのアプリケーションを実現できる。
RESTではこの特徴を「アプリケーション状態エンジンとしてのハイパーメディア」と呼ぶ。
 
-RESTと分散システム
RESTに基づいたWebサービスは性能劣化が抑えられる。インターフェースが固定されているので、バージョンアップによる互換性の問題が発生しない。

 

<第2部> URI

URIの仕様

URIスキーム、ホスト名、パスで構成されている。
URIスキーム : http  利用するプロトコル
ホスト名 :  blog.example/jp  ドメイン名かIPアドレス
パス : /entries/1  リソースを一意に指し示す
 

より複雑なURI

URIスキーム : http
ユーザ情報 : yohei:pass
ホスト名 : blog.example.jp
ポート番号 : 8000
パス : /search
クエリパラメータ : q=test&debug=ture  クライアントから動的にURIを作成するときに使用
URIフラグメント : #n10  URIが指し示すリソース内部のさらに細かい部分を特定するときに使用
 

絶対パス相対パス

ルートディレクトリの頂点から目的地の経路を表す。どの階層にいたとしても、同じスタートかつ同じ経路
 
今いる階層を基準として、目的地がどこにあるのか表す。
 

URIと文字

URIで使用できる文字は決められており、日本語の文字は直接いれることができない。
そのため、URI使用が許可していない文字をURIにいれるには%エンコーディングで文字をエンコードする。
URIの長さに制限はないが、実装常は制限が存在する。
クライアントで相対URIを解決するには処理が大変なので、なるべく絶対URIを使ったほうがよい。
 

URIの設計

URIを設計する際・・・
-プログラミング言語依存の拡張子を利用しない
-実装依存のパス名を利用しない
-プログラミング言語のメソッド名を利用しない
-セッションID含めない
-URIはそのリソースを表現する名詞である(RESTで設計する場合)
 
URIは覚えやすく普通の人にも使いやすいように、シンプルでわかりやすいものにするべき。
URIの変更は難しいので、なるべくしないほうがよい。どうしてもしたい場合は、リダイレクトするようにする。(古いURIを新しいURIに転送するHTTPのしくみ)
 

URI設計のテクニック

(拡張子で表現を指定する)
実装に依存した拡張子は良くないが、依存していない拡張子はリソースの表現を特定するという使い方ができる。
-コンテントネゴシエーション
クライアントの言語設定に従って自動的に適した表現を返す
-言語を指定する拡張子
.jaや.enなどのような拡張子を使うことで、リソースの言語を明示的に指定。
 
(マトリクスURI)
URIはスラッシュ(/)を使って階層を表現できるが、すべての情報が階層で管理できるとは限らない。(複数のパラメータの組み合わせで表現するリソースなど)
その場合にはマトリクスURIを使う。
セミコロンかカンマでパラメータを区切る。
 

URIの不透明性

URIをクライアント側で組み立てたり、拡張子からリソース内容を推測できないことを「URIはクライアントにとって不透明である」という。
不透明性を意識して実装すべきである。
 

URIを強く意識する

-URIはリソースの名前である
-URIは寿命が長い
-URIはブラウザがアドレス欄に表示する