意味
リクエストがリソースの現在の状態と競合しています。重複や同時編集などです。
よくある原因
- 既に存在するレコードを作成しようとした(一意のメールや名前)
- 他の人が変更したリソースを編集した
- git のようなバージョンや状態の競合
対処法
クライアント・閲覧者の場合
最新の状態を取得し、競合を解決するか別の値を選んでから再試行します。
サイトや API の運営者の場合
何が競合しているかをボディで説明します。ETag による楽観的ロックには 412 のほうが正確です。
レスポンス例
HTTP/1.1
HTTP/1.1 409 Conflict
Date: Tue, 07 Oct 2025 09:30:00 GMT
Server: nginx
Content-Type: application/problem+json
{
"type": "about:blank",
"title": "Conflict",
"status": 409,
"detail": "A user with this email already exists."
} 仕様
よくある質問
› 重複したメールには 409 と 422 のどちら?
どちらも使われます。既存データとの競合なら 409、検証フレームワークなら 422 が合います。一貫させてください。
› クライアントは 409 を自動再試行すべき?
いいえ。競合には通常判断が必要です。まずデータを更新します。