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に対する更新・削除操作を実装し、条件付きリクエストでデータの整合性を確保する必要がある場合に使用します。