Webを支える技術
概要
HTTP、URI、HTML、そしてREST
実戦的なWebサービスの設計指針
なぜWebはこんなにも成功したのか
WEBのアーキテクチャスタイル
新システム設計時には下記、RESTアーキテクチャスタイルから必要な機能を選択する。
| 機能 | 内容 | 利点 |
|---|---|---|
| クライアント/サーバ |
クライアント:ユーザインタフェース サーバ:データストレージ に役割を分離する |
マルチプラットフォーム (PC、携帯、ゲーム機) サーバの助長化 |
| ステートレスサーバ | サーバ側でクライアントの状態を管理しない | サーバの実装を簡略化できる Cookieを用いると複雑化する |
| キャッシュ | リソースを再利用する | 通信量・回数低減 |
| 統一インタフェース | GET、POST等8つのメソッドに固定 | シンプル 独立性向上 |
| 断層化システム | システムを断層化(分離)する | ロードバランサ、プロキシ等の別システムを拡張できる |
| コードオンデマンド | スクリプトプログラムをサーバからダウンロードしてクライアントで実行する | クライアント側のみでの複雑な処理が可能 |
URI
URIを変わりにくくするためには
プログラミング言語に依存した拡張子、パスを含めない
https://office-yone.com/servlet/LoginServlet
メソッド名、セッションIDを含めない
https://office-yone.com/login.do?action=show
https://office-yone.com/login.jsp?jsessionid=99999
リソースを名詞に
URIのユーザビリティ
URIをシンプルに短くする事で、
・タイプミスの軽減
・メディアでの露出のし易さ
・経費削減
等が見込める
不透明性
↓ 想像
本来アクセスされたくないリソースにアクセスされる恐れが高まる
HTTP
TCP/IP
HTTPはTCP/IPが動作する事を前提に動作する
| 層 | プロトコル | 処理内容 |
|---|---|---|
| アプリケーション層 | HTTP、SSH、SMTP、DNS | 接続~送受信~切断 |
| セッション層 | ||
| トランスポート層 | UDP、TCP | IPから送信されたパケットの到達処理 |
| ネットワーク層 | IP | パケットを宛先へ送信 |
| 物理層/データリンク層 | イーサネット | 電気信号を伝達 |
同期型
HTTPは以下の方式を採用しており、レスポンスを取得するまでは待機し続ける。
クライアント/サーバ方式
リクエスト~レスポンス
リクエスト/レスポンスメッセージ
HTTPリクエストメッセージ
「HTTPプロトコル/HTTPリクエスト」参照
HTTPレスポンスメッセージ
「HTTPプロトコル/HTTPレスポンス」参照
ステートレス
| ステートフル | ステートレス | 備考 | |
|---|---|---|---|
| クライアントの状態 アプリケーション状態 |
記憶する | 記憶しない | |
| 通信量 | 少 差分のみリクエストする |
多 常に状態をリクエストする |
|
| 負荷 | 高 | 低 | 認証時等 |
| スケールアウト | × | ○ | |
| 実装 | 複雑 | 単純 |
メソッド
| メソッド | 処理内容 | べき等 | 安全性 |
|---|---|---|---|
| GET | リソースの取得 | ○ | ○ |
| POST | リソースの作成、追加、他 | × | × |
| PUT | リソースの更新、作成 | ○ | × |
| DELETE | リソースの削除 | ○ | × |
| HEAD | リソースのヘッダ(メタデータ)取得 | ○ | ○ |
| OPTIONS | リソースがサポートするメソッドの取得 | ○ | ○ |
| TRACE | 試験用 | ||
| CONNECT | プロキシ接続設定 |
べき等
常に取得できる結果が同一である事
PUT、DELETEを複数回実行した場合、1回目で更新対象が変化して2回目で更新が失敗したとしても、更新したという結果が得られる
安全性
リソースが変化しない事
ステータスコード
HTTPヘッダ
メタ情報を記述する部分(≠body)
ヘッダ情報からプログラムの挙動を決定する
(主にサーバ)
メディアタイプ
bodyの内容の種類を示す
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
| ファイル形式 | 一般的な拡張子 | MIMEタイプ | デフォルト文字コード charset未指定時 |
|---|---|---|---|
| テキスト | .txt | text/plain | ISO 8859-1 ※英数字、記号から成る (日本語無し) |
| テキスト | .csv | text/csv | |
| HTML文書 | .htm .html | text/html | |
| スタイルシート | .css | text/css | |
| JavaScript | .js | text/javascript | |
| VBScript | .vbs | text/vbscript | |
| CSS | .css | text/css | |
| XML文書 | .xml | text/xml(非推奨) | |
| GIF画像 | .gif | image/gif | 無し |
| JPEG画像 | .jpg .jpeg | image/jpeg | |
| PNG画像 | .png | image/png | |
| JSON文書 | .json | application/json | |
| CGIスクリプト | .cgi | application/x-httpd-cgi | |
| Word文書 | .doc | application/msword | |
| PDF文書 | application/pdf | ||
| JavaScript | .js | application/javascript | |
| XML文書 | .xml | application/xml |
無し XML宣言部での定義推奨 <?xml version="1.0" encoding="utf-8" ?> |
| XHTML文書 | .xml | application/xhtml+xml |
エンコーディング
charset=utf-8
charset=sjis

