コンピューターサイエンス:アルゴリズム / OS / ネットワーク / DB

HTTP メソッド

生田 陸人
LuaGate エンジニア / 現役エンジニア
編集 LuaGate編集部

HTTP メソッド とは

GET / POST / PUT / DELETE などのメソッドの意味と冪等性を学びます。本レッスンでは、HTTP メソッド の基本から実際の使いどころまでを整理し、現場で迷わず使える形に落とし込みます。

このレッスンで学ぶこと

HTTP のリクエストメソッド (動詞) を整理します。GET / POST / PUT / DELETE などの違いと、冪等性 (べきとうせい) という重要な性質を理解しましょう。

主要メソッド

メソッド用途冪等性安全ボディ
GETリソースの取得YESYESなし
POSTリソースの新規作成 / 任意の処理NONOあり
PUTリソースの完全置き換えYESNOあり
PATCHリソースの部分更新NO (通常)NOあり
DELETEリソースの削除YESNO任意
HEADヘッダーだけ取得YESYESなし
OPTIONSサポートしているメソッドを問い合わせるYESYESなし

「安全」は「サーバー側の状態を変えない」という意味です。

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 つができることを確認しましょう。

  1. HTTP メソッド の要点を自分の言葉で説明できる
  2. このレッスンの最小コード (または操作手順) を見ずに書ける
  3. 練習問題やクイズで間違えた箇所を読み直して理解した

理解度チェック (30 秒)

Q. HTTP メソッド とは何か、1 文で説明してください。

この章のポイント

A. 本文の「このレッスンで分かること」または冒頭の説明文を見直し、自分の言葉で要約できれば OK。詰まったら本レッスンの最初の H2 セクションを読み返してみましょう。

関連レッスン

復習ミニクイズ

次のうち冪等 (idempotent) ではないメソッドはどれですか