コンピューターサイエンス:アルゴリズム / OS / ネットワーク / DB
HTTP メソッド
HTTP メソッド とは
GET / POST / PUT / DELETE などのメソッドの意味と冪等性を学びます。本レッスンでは、HTTP メソッド の基本から実際の使いどころまでを整理し、現場で迷わず使える形に落とし込みます。
このレッスンで学ぶこと
HTTP のリクエストメソッド (動詞) を整理します。GET / POST / PUT / DELETE などの違いと、冪等性 (べきとうせい) という重要な性質を理解しましょう。
主要メソッド
| メソッド | 用途 | 冪等性 | 安全 | ボディ |
|---|---|---|---|---|
| GET | リソースの取得 | YES | YES | なし |
| POST | リソースの新規作成 / 任意の処理 | NO | NO | あり |
| PUT | リソースの完全置き換え | YES | NO | あり |
| PATCH | リソースの部分更新 | NO (通常) | NO | あり |
| DELETE | リソースの削除 | YES | NO | 任意 |
| HEAD | ヘッダーだけ取得 | YES | YES | なし |
| OPTIONS | サポートしているメソッドを問い合わせる | YES | YES | なし |
「安全」は「サーバー側の状態を変えない」という意味です。
GET と POST の最も大きな違い
- GET — URL にパラメータが乗る (
?q=helloなど)。キャッシュ可能。ブックマーク可能。 - POST — ボディに乗る。キャッシュ不可。状態を変える操作で使う。
検索やページ遷移は GET、フォーム送信や決済は POST、というのが定番の使い分けです。
冪等性 (idempotence)
冪等とは、同じリクエストを何回送っても結果が同じになる性質のことです。
- GET — 何度取得しても結果は同じ (DB から見ても変化なし)
- PUT — 同じ完全置き換えを何回しても結果は同じ
- DELETE — 削除済みを何度削除しても結果は同じ (404 にはなる)
- POST — 同じリクエストを 2 回送ったら、リソースが 2 個できる可能性がある
ネットワークが不安定なとき、再送して安全なのは冪等なメソッドだけです。決済 API などで「同じリクエスト ID なら 1 回しか処理しない」(Idempotency-Key) を導入するのは、POST を冪等化するためです。
実務での落とし穴
PATCH は「部分更新」ですが、冪等とは限りません。たとえば「在庫を +1 する」PATCH は何度も送ると在庫が増えていきます。「在庫を 10 にする」のように絶対値で書けば冪等になります。冪等性は「操作の中身」次第で決まるので、自分で設計するときに意識的に選ぶ必要があります。
CORS と OPTIONS プリフライト
ブラウザから JavaScript で別オリジン (ドメイン) の API を叩くとき、CORS (Cross-Origin Resource Sharing) という仕組みで安全性が確保されています。
特定の条件 (POST に独自ヘッダー、Content-Type が application/json など) を満たすと、本リクエストの前にプリフライトリクエスト (OPTIONS) が飛びます。サーバーは「このオリジンからのこのメソッドを許可する」と Access-Control-Allow-* ヘッダーで応答し、ブラウザはそれを見て本リクエストを送信します。
CORS エラーで本番が動かない、というのは Web 開発者なら誰もが経験する儀式です。
HEAD と OPTIONS の用途
- HEAD — ファイルサイズや更新日時だけ知りたいときに便利。本体を取らないので軽い。
- OPTIONS — CORS プリフライト以外にも、サーバーが対応しているメソッド一覧を問い合わせるのに使える。
TRACE と CONNECT
- TRACE — リクエストを送信者に折り返す診断用。セキュリティリスクがあるため通常は無効化。
- CONNECT — プロキシ経由で TCP トンネルを作る。HTTPS プロキシで使われる。
普段の Web 開発では出てきませんが、用語として知っておくと運用時の選択肢が広がります。
「正しい使い分け」が REST の前提
REST API では「GET = 取得、POST = 作成、PUT/PATCH = 更新、DELETE = 削除」というメソッド本来の意味に従って設計します。POST /delete-user のような URL は「メソッドの意味を URL に書いている」アンチパターンで、DELETE /users/123 のほうが意図が明確です。
まとめ
HTTP メソッドは「リソースに対する動詞」で、それぞれに「安全」「冪等」「ボディの有無」という属性があります。GET / POST の違い、PUT vs PATCH、DELETE の冪等性、CORS のプリフライトという基本を押さえれば、REST API の設計や障害対応がスムーズになります。次のレッスンでは、HTTP に暗号化を加えた HTTPS と TLS の仕組みに進みます。
よくある質問
Q. GET と POST はどう使い分けますか?
A. 「取得して副作用がない」なら GET、「作成・更新など状態を変える」なら POST が原則です。GET は URL にパラメータが入りキャッシュも効きますが、POST はボディに乗せられ大きなデータも送れます。冪等性も GET は持ち、POST は持たないという違いがあります。
Q. ステータスコードは何を返すべき?
A. 成功は 2xx、リダイレクトは 3xx、クライアントエラーは 4xx、サーバーエラーは 5xx が大原則です。新規作成は 201、認証失敗は 401、権限不足は 403 を返すと REST 慣習に沿った設計になります。200 で全部返すのは避けてください。
Q. REST と GraphQL の違いは?
A. REST はリソース単位のエンドポイント、GraphQL は単一エンドポイントでクエリ言語を使って欲しいデータを指定します。フロントの要件が頻繁に変わるなら GraphQL、シンプルな CRUD なら REST がメンテしやすいことが多いです。
次のレッスン
次は HTTPS と TLS ハンドシェイク で、GET / POST / PUT / DELETE などのメソッドの意味と冪等性を学びます を学びます。
事前確認 — 進む前に次の 3 つができることを確認しましょう。
- HTTP メソッド の要点を自分の言葉で説明できる
- このレッスンの最小コード (または操作手順) を見ずに書ける
- 練習問題やクイズで間違えた箇所を読み直して理解した
理解度チェック (30 秒)
Q. HTTP メソッド とは何か、1 文で説明してください。
A. 本文の「このレッスンで分かること」または冒頭の説明文を見直し、自分の言葉で要約できれば OK。詰まったら本レッスンの最初の H2 セクションを読み返してみましょう。
関連レッスン
復習ミニクイズ
次のうち冪等 (idempotent) ではないメソッドはどれですか