HTTPメソッド — GET・POST・PUT・DELETEの使い分け
HTTPリクエストには必ず メソッド が含まれます。メソッドは「このリクエストで何をしたいのか」をサーバーに伝える動詞のようなものです。
この章では、Web APIで使う主要なHTTPメソッドの意味と使い分け、そして設計で重要になる べき等性 と 安全性 の概念を整理します。
学習者データを送るのはとりあえず全部 POST でいい気がするけど…GET や PUT ってわざわざ使い分ける必要あるの?
主要なHTTPメソッド

最もよく使う4つのメソッドは、CRUDの各操作に対応します。
| メソッド | 意味 | CRUD | 例 |
|---|---|---|---|
GET | リソースの取得 | Read | ユーザー情報を取得する |
POST | リソースの作成 | Create | 新しいユーザーを登録する |
PUT | リソースの全体更新 | Update | ユーザー情報を丸ごと書き換える |
DELETE | リソースの削除 | Delete | ユーザーを削除する |
GET /api/users/1 → ユーザー1の情報を取得
POST /api/users → 新しいユーザーを作成
PUT /api/users/1 → ユーザー1の情報を全体更新
DELETE /api/users/1 → ユーザー1を削除
その他のメソッド
上記4つに加えて、実務で登場するメソッドがいくつかあります。
| メソッド | 意味 | よくある使い方 |
|---|---|---|
PATCH | リソースの部分更新 | 名前だけ変える、ステータスだけ変える |
OPTIONS | サーバーが対応するメソッドの確認 | CORSのプリフライトリクエスト |
HEAD | GETと同じだがボディなし | リソースの存在確認、キャッシュチェック |
PUT と PATCH の違いは、PUTが「リソース全体を送り直す」のに対し、PATCHが「変更したいフィールドだけ送る」という点です。
PUT /api/users/1
{ "name": "Bob", "email": "bob@example.com", "role": "admin" }
// ← 全フィールドを送る
PATCH /api/users/1
{ "name": "Bob" }
// ← 変えたいフィールドだけ送る
安全性とべき等性
HTTPメソッドには 安全性(Safe) と べき等性(Idempotent) という2つの性質があります。API設計でメソッドを正しく選ぶための基準です。
安全性 — そのリクエストがサーバーの状態を変更しないこと。GETは安全、POSTは安全ではない。
べき等性 — 同じリクエストを何回送っても結果が同じであること。GETやPUTはべき等、POSTはべき等ではない。
| メソッド | 安全 | べき等 |
|---|---|---|
GET | はい | はい |
POST | いいえ | いいえ |
PUT | いいえ | はい |
DELETE | いいえ | はい |
PATCH | いいえ | いいえ |
なぜべき等性が重要なのか
ネットワークは不安定です。リクエストを送ったのにレスポンスが返ってこなかった場合、「サーバーに届いたのか、届かなかったのか」がわかりません。
べき等なメソッド(GET、PUT、DELETE)なら、もう一度同じリクエストを送っても問題ない ので安全にリトライできます。POSTは送り直すと2件作成される可能性があるため、リトライには工夫が必要です。
GETリクエストの原則
GETは最も頻繁に使われるメソッドです。いくつかの重要な原則があります。
1. GETでデータを変更してはいけない
// NG — GETで削除処理
GET /api/users/1/delete
// OK — DELETEメソッドを使う
DELETE /api/users/1
GETは検索エンジンのクローラーやブラウザのプリフェッチが自動的に送ることがあります。GETで副作用がある操作を作ると、意図せずデータが変更される危険があります。
2. パラメータはクエリ文字列で渡す
GET /api/users?page=2&limit=20&sort=name
GETにはリクエストボディを含めないのが慣例です。技術的には可能ですが、多くのHTTPクライアントやプロキシがGETのボディを無視するため、実務では避けます。
POSTリクエストの使い方
POSTは新しいリソースを作成するときに使います。
POST /api/users
Content-Type: application/json
{
"name": "Alice",
"email": "alice@example.com"
}
レスポンスには通常 201 Created と、作成されたリソースの情報が返ります。
HTTP/1.1 201 Created
Location: /api/users/42
{
"id": 42,
"name": "Alice",
"email": "alice@example.com"
}
Location ヘッダーで作成されたリソースのURLを返すのが行儀の良いAPIです。
よくある誤用パターン
1. すべてPOSTで処理する
// NG — 全部POST
POST /api/getUser { "id": 1 }
POST /api/deleteUser { "id": 1 }
// OK — メソッドで意図を表現する
GET /api/users/1
DELETE /api/users/1
メソッドを正しく使うと、URLを見ただけで「何をするAPIか」がわかります。
2. GETで更新処理を行う
// NG — ブラウザのプリフェッチやクローラーでも実行される
GET /api/users/1/activate
状態を変える操作には POST、PUT、PATCH、DELETE を使います。
まとめ
- HTTPメソッドは CRUD操作 に対応する: GET=Read、POST=Create、PUT/PATCH=Update、DELETE=Delete
- 安全性 はサーバーの状態を変えないこと、べき等性 は何回送っても同じ結果になること
- GETは データを変更しない・クエリ文字列に機密情報を入れない が原則
- POSTは べき等ではない ため、リトライには注意が必要
- メソッドを正しく使い分けることで、API全体の可読性と信頼性が上がる
次の章では、サーバーからの応答を読み解く HTTPステータスコード を詳しく見ていきます。