HTTP 409 Conflict
Bir durum çakışması: istek geçerli, ancak kaynak, şu anda uygulanmasını imkansız hale getirecek şekilde değişti.
HTTP 409 ne anlama gelir
HTTP 409 Conflict, sunucunun isteği anladığı ancak hedef kaynağın mevcut durumuyla çeliştiği için uygulayamadığı anlamına gelir. Klasik örnek bir düzenleme çakışmasıdır: iki istemci aynı belgeyi yükler, ikisi de kaydeder ve ikinci kayıt, birincisinin üzerine sessizce yazar.
400'den farklı olarak, isteğin kendisi doğru biçimlendirilmiştir — değiştirmeden yeniden göndermek daha sonra bile başarılı olabilir. Yanıt gövdesi, istemcinin (veya kullanıcının) sorunu çözüp yeniden deneyebilmesi için neyin çakıştığını açıklamalıdır.
409 hatalarının yaygın nedenleri
- Bir düzenleme çakışması: istemci kaynağı en son aldığından beri başka biri tarafından değiştirilmiştir (genellikle ETag / If-Match üzerinden ortaya çıkar).
- Zaten var olan bir kaynağın oluşturulması — yinelenen kullanıcı adı, e-posta, slug veya dosya adı.
- Optimistic locking'de bir sürüm uyuşmazlığı: gönderilen sürüm numarası güncel değil.
- Sunucunun sahipsiz bırakmayı reddettiği bağımlılıkları olan bir kaynağın silinmesi veya taşınması.
- Sırasız uygulanan eşzamanlı iş akışı adımları (örneğin, zaten iptal edilmiş bir siparişi onaylamak).
Bir geliştirici olarak nasıl düzeltilir
- Yanıt gövdesini okuyun — iyi bir API, çakışan alanı veya beklenen mevcut sürümü belirtir.
- Kaynağı yeniden alın, değişikliğinizi güncel durumun üzerine yeniden uygulayın ve yeniden gönderin.
- Çakışmaların verilerin üzerine yazmak yerine güvenilir şekilde tespit edilmesi için koşullu istekler (ETag'lerle If-Match) kullanın.
- Yinelenen oluşturma çakışmaları için idempotency'yi önceden belirleyin: mevcut kaynağı döndürün veya ona işaret eden bir bilgiyle birlikte 409 döndürün.
Örnek yanıt
HTTP/1.1 409 Conflict
Content-Type: application/json
{"error":"conflict","message":"document was modified by another user","current_version":42}SSS
409 ile 400 arasındaki fark nedir?
400, isteğin kendisinin hatalı biçimlendirilmiş veya geçersiz olduğu anlamına gelir. 409, isteğin sorunsuz olduğu ancak kaynağın mevcut durumuyla çakıştığı anlamına gelir — çakışma çözüldükten sonra yeniden denemek başarılı olabilir.
Bir API ne zaman 422 yerine 409 döndürmelidir?
Payload içindeki doğrulama hataları için 422, kopyalar veya eski sürümler gibi mevcut sunucu tarafı durumla çakışmalar için 409 kullanın.
ETag'ler 409 hatalarını önlemeye nasıl yardımcı olur?
İstemci, en son gördüğü ETag ile birlikte If-Match gönderir; sunucu değişikliği yalnızca kaynak değişmemişse uygular, aksi halde üzerine yazmak yerine 409 (veya 412) döner.