curlでPUT、PATCH、DELETEリクエストを送信する

curlでHTTPのPUT、PATCH、DELETEメソッドを使う方法を解説。REST APIでのリソース更新・削除、冪等性、ETag、条件付きリクエストパターンを学びましょう。

General

詳細な説明

curlでPUT、PATCH、DELETEを使う

REST APIは操作ごとに異なるHTTPメソッドを使用します。GETがデータ取得、POSTが作成であるのに対し、PUTはリソース全体の置換、PATCHは部分更新、DELETEはリソースの削除を行います。

PUTリクエスト(全体の置換)

PUTは、指定されたデータでリソース全体を置き換えます:

curl -X PUT https://api.example.com/users/42 \
  -H "Content-Type: application/json" \
  -d '{"name": "Alice Smith", "email": "alice@example.com", "role": "admin"}'

PUTリクエストではすべてのフィールドを含める必要があります。省略されたフィールドは通常、nullまたはデフォルト値に設定されます。

PATCHリクエスト(部分更新)

PATCHは指定されたフィールドのみを更新します:

curl -X PATCH https://api.example.com/users/42 \
  -H "Content-Type: application/json" \
  -d '{"role": "admin"}'

role フィールドのみが更新され、他のすべてのフィールドは変更されません。

DELETEリクエスト

DELETEはリソースを削除します:

curl -X DELETE https://api.example.com/users/42

一部のAPIではDELETEリクエストにボディが必要です:

curl -X DELETE https://api.example.com/items \
  -H "Content-Type: application/json" \
  -d '{"ids": [1, 2, 3]}'

冪等性

  • PUT は冪等: 同じデータで複数回呼び出しても同じ結果になる
  • DELETE は冪等: 同じリソースを2回削除しても同じ状態になる(リソースは削除済み)
  • PATCH は実装によって冪等であったりなかったりする

ETagによる条件付き更新

ETagを使って競合する更新を防止します:

# 現在のETagを取得
ETAG=$(curl -sI https://api.example.com/users/42 | grep -i etag | tr -d '\r')

# If-Match付きで更新
curl -X PUT https://api.example.com/users/42 \
  -H "Content-Type: application/json" \
  -H "If-Match: \"abc123\"" \
  -d '{"name": "Updated Name"}'

変更の検証

変更は必ず検証しましょう:

# 更新
curl -X PATCH https://api.example.com/users/42 \
  -H "Content-Type: application/json" \
  -d '{"name": "Alice"}' \
  -w "\nHTTP Status: %{http_code}\n"

# 検証
curl -s https://api.example.com/users/42 | jq .

200または204レスポンスは成功を示します。409は競合を示し、404はリソースが存在しないことを意味します。

ユースケース

CRUDアプリケーションを構築する開発者が、REST APIに対する更新・削除操作を実装し、条件付きリクエストでデータの整合性を確保する必要がある場合に使用します。

Try It — Curl to Code Converter

フルツールを開く