Webを支える技術を会社の先輩からお借りして読了しました。
自分で買ってまた読みたいです。
自分なりのまとめです。
第1回は第1部から第3部までをまとめました。
##REST
###RESTとは
Webのアーキテクチャスタイル。
###RESTアーキテクチャスタイル
- クライアント/サーバ:ユーザーインターフェースと処理を分離する
- ステートレスサーバ:サーバ側でアプリケーション状態を持たない
- キャッシュ:クライアントとサーバの通信回数と量を減らす
- 統一インターフェース:インターフェースを固定する
- 階層化システム:システムを階層に分離する
- コードオンデマンド:プログラムをクライアントにダウンロードして実行する
WebサービスやWebAPIがRESTfulになると、Webは全体としてよりよくなっていく。
##URI
###URIとは
Uniform Resource Identifier。リソースを統一的に識別するIDのこと。URIを使うとWeb上に存在するすべてのリソースを一意に示せる。
###クールURI
よいURIやきれいなURIのこと。
URIは変わらないべきであるし、変わらないURIこそが最上のURIである。
URIの設計指針は以下の5つである。
- URIにプログラミング言語依存の拡張子を利用しない
- URIに実装依存のパス名を利用しない
- URIにプログラミング言語のメソッド名を利用しない
- URIにセッションIDを含めない
- URIはそのリソースを表現する名刺である
###URIを強く意識する必要がある
URIは次の点でとても重要である。
- URIはリソースの名前である
- URIは寿命が長い
- URIはブラウザがアドレス欄に表示する
これらの観点より、URIはWebサービスやWebAPIの設計においてもっとも重要するべきパーツであるといえる。
##HTTPの基本
###HTTPとは
TCP/IPをベースとしたプロトコル。
RESTのアーキテクチャスタイルである統一インターフェース、ステートレスサーバ、キャッシュなどを実現している、Webの基盤となるプロトコル。
###TCP/IP
ネットワークプロトコルであり、階層型になっている。
- ネットワークインターフェース:物理的なケーブルやネットワークアダプタ
- インターネット層:データを実際にやり取りする部分。パケット単位でデータをやり取りする
- トランスポート層:接続先に対してコネクションを張り、データの到達を保障する
- アプリケーション層:具体的なインターネットアプリケーション
###HTTPの仕組み
クライアント(Webブラウザ)が情報を提供するサーバ(Webサーバ)に接続し、各種のリクエストを出して、レスポンスを受け取る。
###HTTPメッセージ
クライアントがサーバにリクエストするときに送るリクエストメッセージと、クライアントがサーバからレスポンスを受け取る時に受けるレスポンスメッセージをまとめてHTTPメッセージと呼ぶ。
リクエストメッセージは以下の要素で構成される。
- リクエストライン:メソッド、リクエストURI、プロトコルバージョン
- ヘッダ:メッセージのメタデータ
- ボディ:本質的な情報。リソースを更新するリクエストを送る場合は、新しく作成するリソースの表現そのものが入る
レスポンスメッセージは以下の要素で構成される。
- ステータスライン:プロトコルバージョン、ステータスコード、テキストフレーズ
- ヘッダ:メッセージのメタデータ
- ボディ:本質的な情報
##HTTPメソッド
###8つのメソッド
HTTP1.1は以下の8つのメソッドのみ用意されている。
- GET:リソースの取得
- POST:子リソースの作成、リソースへのデータ追加、そのほかの処理
- PUT:リソースの更新、リソースの作成
- DELETE:リソースの削除
- HEAD:リソースのヘッダの取得
- OPTIONS:リソースがサポートしているメソッドの取得
- TRACE:自分宛にリクエストメッセージを返す試験
- CONNECT:プロキシ動作のトンネル接続への変更
###POSTとPUTの使い分け
どちらのメソッドでもリソースを作成することが可能である。設計上の指針として次のような事実がある。
POSTでリソースを作成する場合は、リソースのURIを指定することができない。
PUTでリソースを作成する場合は、リソースのURIをクライアントで指定することができる。
###べき等性と安全性
- べき等性:ある操作を何回行っても結果が同じこと
- 安全性:操作対象のリソースの状態を変化させないこと
HTTPメソッドはその性質によって、以下のように分類することができる。
メソッド | 性質 |
---|---|
GET,HEAD | べき等かつ安全 |
PUT,DELETE | べき等だが安全ではない |
POST | べき等でも安全でもない |
- GET,DELETE:同じリクエストを何度送信しても同じ結果が返ってくる。また、リソースの状態も変えることはない
- PUT,DELETE:同じリクエストを何度送信しても更新(PUT)された結果は同じになる。また、削除(DELETE)された結果も同じになる。しかし、リソースの中身を変えてしまっているので安全ではない。
- POST:同じリクエストを複数回送信すると、複数回データが更新されてしまうことがある(ショッピングサイトの二重注文など)。また、リソースの中身を変えてしまっているので安全でもない。
###Webの成功はHTTPメソッドにあり
メソッドを限定して固定したからこそプロトコルがシンプルに保たれ、Webは成功した(RESTの統一インターフェース制約)。
##ステータスコード
###ステータスコードの分類と意味
レスポンスメッセージに含まれる。レスポンスメッセージの意味を伝える。
- 1xx:処理が継続していることを示す
- 2xx:成功
- 3xx:他のリソースへのリダイレクトを示す
- 4xx:クライアントエラーを示す。原因はクライアントのリクエストにある
- 5xx:サーバエラーを示す。原因はサーバ側にある
###ステータスコードを意識して設計する
ステータスコードにはそれぞれ意味があり、正しく扱うことが大切である。WebサービスやWebAPIでエラーが起きた時にどのステータスコードを返すかは、とても重要な設計の検討事項である。
##HTTPヘッダ
###HTTPヘッダとは
メッセージのボディの対する付加的な情報、いわゆるメタデータを表現する。クライアントやサーバはヘッダを見てメッセージに対する挙動を決定する。
日時やMIMEメディアタイプ、認証の方法やキャッシュの可否を指定することができる。