ぼちぼちクラウド

クラウド系SEのぼちぼち技術ブログ

【読書記録】Webを支える技術 第3部②

第7章 HTTPメソッド

8種類のメソッド

  1. GET
  2. POST
  3. PUT
  4. DELETE
  5. HEAD
  6. OPTIONS
  7. TRACE:ほとんど使われていない
  8. CONNECT:ほとんど使われていない

代表的なメソッド

  1. GET(読み込み)
  2. POST(作成)
  3. PUT(作成・更新) ※POSTで代用可能
  4. DELETE(削除) ※POSTで代用可能

POSTとPUTの使い分け(作成処理)

  • 上記の通り、POSTでもPUTでも作成処理が行える
POST
  • リソースのURIはサーバ側が決める
  • 例:Twitter
PUT
  • リソースのURIを指定できる
  • 例:Wikipedia
  • URIの文字数制限など考慮が必要なため、特別な理由がない限りPOSTを使用することが望ましい

PUT/DELETEのPOSTによる代用

なぜ代用を考えるのか
  • ブラウザによってはGETとPOSTしか対応していない場合がある
  • セキュリティ上の理由でプロキシサーバがGETとPOST以外のアクセスを制限していることもある
代用方法

条件付きリクエス

  • メソッドを実行するかどうかの条件をつけ、実行有無をサーバが選択できるようにすることが可能
  • 例:ヘッダにリソースの更新日時を付加し、この日時以降更新されていたらGET処理を行う

べき等性(冪等性)と安全性

べき等性
  • ある操作を何回行っても結果が同じになること
  • PUTやDELETEはべき等。同じPUT(DELETE)を何回行っても同じ結果
安全性
  • 操作対象のリソースの状態を変化させないこと
  • GETとHEADは安全
POST
  • POSTは安全でもべき等でもない
  • リクエストの結果、リソースが変化する可能性もあれば前回と結果が変わる可能性もある

※PUTがべき等でなくなるパターンなど、例外も本書内で紹介されている

まとめ

下記の点でHTTPはすぐれたプロトコルといえる
  • HTTPは限られたメソッドで構成される=RESTの統一インタフェース制約
  • GETの安全性
  • PUTとDELETEのべき等性
  • いざとなればなんでもできるPOST

第8章 ステータスコード

分類とよく使われるコード

  • 先頭の数字で場合分けすることでCL/SV間の約束事を減らし、結びつきをゆるやかにする効果(疎結合)
1xx:処理中
2xx:成功
  • 200:リクエスト成功
  • 201:リソース作成成功
3xx:リダイレクト
  • 301 リソースの恒久的な移動
  • 303 別URIの参照
4xx:クライアントエラー
  • 400 Bad Request リクエストの間違い
  • 401 Unauthorized アクセス権の不正
  • 404 Not Found リソースの不在
5xx:サーバーエラー