HTTP Status Code Reference

Hangi HTTP Durum Kodunu Kullanmalıyım? Karar Kılavuzu

API'niz için doğru HTTP durum kodunu seçmeye yönelik interaktif bir karar kılavuzu. Gerçek dünya örnekleriyle başarı, yönlendirme, istemci hatası ve sunucu hatası yanıtlarını kapsar.

Verileriniz tarayıcınızdan çıkmaz.

1xx Bilgilendirme

(4)

2xx Başarılı

(10)

3xx Yönlendirme

(7)

4xx İstemci Hatası

(29)

5xx Sunucu Hatası

(11)
61 / 61 durum kodu

Karar Ağacı

Buradan başlayın ve durumunuza uyan yolu izleyin.

İstek başarılı oldu mu?

Evet ve veri döndürüyorum -> 200 OK Varsayılan başarı yanıtı. Veri döndüren GET istekleri, eylem gerçekleştiren POST istekleri ve sonucu güncelleyip döndüren PUT/PATCH istekleri için kullanın.

Evet ve yeni bir kaynak oluşturdum -> 201 Created POST veya PUT yeni bir şey oluşturduktan sonra kullanın. Yeni kaynağın URL’si ile bir Location başlığı ekleyin.

Evet ancak döndürülecek gövde yok -> 204 No Content Başarılı DELETE istekleri veya istemcinin güncellenmiş kaynağa ihtiyacı olmadığı PUT/PATCH için kullanın. Yanıtın gövdesi yoktur.

Evet ancak bunu zaten yaptım -> 200 OK veya 204 No Content Kaç kez çağrıldığına bakılmaksızın son durumun aynı olduğu idempotent işlemler (PUT, DELETE) için, ilk çağrıda döndüreceğiniz aynı başarı kodunu döndürün.

Kabul edildi ancak henüz bitmedi -> 202 Accepted Sunucu isteği eşzamansız işleme için kuyruğa aldığında kullanın. İstemci daha sonra yoklamalı veya bir geri arama almalıdır. Uzun süren işler, toplu işlemler veya webhook teslimatları için iyidir.


İstemcinin başka bir yere gitmesi gerekiyor mu?

Kalıcı olarak taşındı -> 301 Moved Permanently Kaynağın kalıcı olarak yeni bir URL’si var. Tarayıcılar ve arama motorları kayıtlarını günceller. GET istekleri için güvenlidir. Not: bazı eski istemciler yönlendirmede POST’u GET’e değiştirir.

Kalıcı olarak taşındı, yöntemi koru -> 308 Permanent Redirect 301 gibi, ancak HTTP yönteminin korunmasını garanti eder. Bir POST, POST olarak kalır. Yöntem korumanın önemli olduğu durumlarda kullanın (API yönlendirmeleri).

Geçici olarak taşındı -> 302 Found Kaynak geçici olarak farklı bir URL’de. Tarayıcılar bunu oturum için önbelleğe alır ancak daha sonra tekrar kontrol eder. Pratikte en yaygın geçici yönlendirme.

Geçici olarak taşındı, yöntemi koru -> 307 Temporary Redirect 302 gibi, ancak HTTP yöntemini korur. Bir POST’un POST olarak kalması gereken geçici API yönlendirmeleri için kullanın.

Diğerine bak -> 303 See Other Bir POST’tan sonra istemciyi bir GET uç noktasına yönlendirmek için kullanın. Yaygın desen: POST /orders, Location: /orders/123 ile 303 döndürür, ardından istemci yeni siparişi GET’ler.


Sorun istemci tarafında mı?

Hatalı istek -> 400 Bad Request İstek sözdizimi yanlış. Geçersiz JSON, eksik Content-Type, kodu çözülemeyen gövde. İstemcinin yeniden denemeden önce isteği düzeltmesi gerekir.

Kimlik doğrulanmamış -> 401 Unauthorized Kimlik bilgisi sağlanmamış veya kimlik bilgilerinin süresi dolmuş/geçersiz. İstemci kimlik doğrulamalı (giriş, token yenileme) ve yeniden denemelidir.

Kimlik doğrulanmış ancak izin yok -> 403 Forbidden Sunucu istemcinin kim olduğunu biliyor ancak izni yok. Yeniden kimlik doğrulama işe yaramaz. Rolleri/izinleri kontrol edin.

Kaynak mevcut değil -> 404 Not Found URL herhangi bir kaynakla eşleşmiyor. Ayrıca, istemcinin bilmesine izin verilmeyen kaynakların varlığını gizlemek için yaygın olarak kullanılır (403 yerine).

Yanlış HTTP yöntemi -> 405 Method Not Allowed Uç nokta mevcut ancak bu yöntemi desteklemiyor. Örnek: salt okunur bir uç noktada DELETE denemesi. Geçerli yöntemleri listeleyen bir Allow başlığı ekleyin.

Geçerli durumla çakışma -> 409 Conflict İstek, kaynağın mevcut durumuyla çakışıyor. Yaygın kullanımlar: yinelenen oluşturma denemeleri, iyimser kilitleme hataları (sürüm uyuşmazlığı), durum makinesi ihlalleri (zaten yayınlanmış bir gönderiyi yayınlamaya çalışmak).

Kaynak silindi -> 410 Gone 404 gibi, ancak sunucu bu kaynağın eskiden var olduğunu ve kasıtlı olarak kaldırıldığını bilir. Arama motorları ve önbellekleme için 404’ten daha güçlü sinyal.

Doğrulama hatası -> 422 Unprocessable Entity Sözdizimi geçerli (düzgün JSON) ancak içerik yanlış. Eksik gerekli alanlar, yanlış veri türleri, aralık dışı değerler. İş mantığı doğrulama hataları için kullanın.

Çok fazla istek -> 429 Too Many Requests Hız sınırlaması. İstemciye ne zaman tekrar deneyeceğini söyleyen bir Retry-After başlığı ekleyin.


Sorun sunucu tarafında mı?

Beklenmeyen sunucu hatası -> 500 Internal Server Error Bir şey bozuldu. İşlenmeyen istisna, null pointer, yapılandırma hatası. “Bu bizim hatamız” için genel yakalama. Hatayı günlüğe kaydedin, dahili bilgileri istemciye ifşa etmeyin.

Uygulanmadı -> 501 Not Implemented Sunucu bu işlevselliği desteklemiyor. Tanımlanmış ancak henüz oluşturulmamış uç noktalar veya sunucunun tanımadığı HTTP yöntemleri için kullanın.

Üst hizmet başarısız oldu -> 502 Bad Gateway Sunucu bir proxy/ağ geçidi olarak hareket ediyor ve üst hizmetten geçersiz bir yanıt aldı. Bir arka uç çöktüğünde yük dengeleyiciler ve ters proxyler ile yaygındır.

Hizmet aşırı yüklü veya bakımda -> 503 Service Unavailable Sunucu şu anda isteği işleyemiyor. Aşırı yüklenmiş, bakımda veya başlatılıyor olabilir. Ne zaman geri döneceğini biliyorsanız bir Retry-After başlığı ekleyin.

Üst hizmet zaman aşımı -> 504 Gateway Timeout Sunucu bir proxy olarak hareket ediyor ve üst hizmet zamanında yanıt vermedi. 408’den (istemci zaman aşımı) farklıdır: 504, sunucunun kendi üst hizmetinin zaman aşımına uğradığı anlamına gelir.


Hızlı Başvuru Tablosu

Başarı (2xx)

KodAdıNe zaman kullanılır
200OKVarsayılan başarı, veri döndürme
201CreatedYeni kaynak oluşturuldu (Location başlığı ekleyin)
202AcceptedEşzamansız işleme başlatıldı
204No ContentBaşarılı, gövde yok (DELETE, unut ve yürüt PUT)

Yönlendirme (3xx)

KodAdıYöntemi korur?Kalıcı?
301Moved PermanentlyHayır (GET’e geçebilir)Evet
302FoundHayır (GET’e geçebilir)Hayır
303See OtherHer zaman GET’e geçerYok
307Temporary RedirectEvetHayır
308Permanent RedirectEvetEvet

İstemci Hatası (4xx)

KodAdıNe zaman kullanılır
400Bad RequestHatalı sözdizimi
401UnauthorizedEksik veya geçersiz kimlik bilgileri
403ForbiddenKimlik doğrulandı ancak izin yok
404Not FoundKaynak mevcut değil
405Method Not AllowedYanlış HTTP yöntemi
409ConflictDurum çakışması (yinelenenler, sürüm uyuşmazlığı)
410GoneKaynak kalıcı olarak kaldırıldı
422Unprocessable EntityGeçerli sözdizimi, geçersiz veri
429Too Many RequestsHız sınırlaması

Sunucu Hatası (5xx)

KodAdıNe zaman kullanılır
500Internal Server Errorİşlenmeyen sunucu hatası
502Bad GatewayÜst hizmet geçersiz yanıt döndürdü
503Service UnavailableAşırı yüklü veya bakımda
504Gateway TimeoutÜst hizmet zamanında yanıt vermedi

Yaygın API Desenleri

REST CRUD işlemleri

İşlemYöntemBaşarı koduHata kodları
Kaynakları listeleGET200401, 403
Bir kaynağı getirGET200401, 403, 404
Kaynak oluşturPOST201400, 401, 403, 409, 422
Tam güncellePUT200 veya 204400, 401, 403, 404, 422
Kısmi güncellePATCH200 veya 204400, 401, 403, 404, 422
Kaynak silDELETE204401, 403, 404

Eklemeye değer başlıklar

Durum koduÖnerilen başlık
201Location: /resource/id
301, 302, 307, 308Location: https://new-url
405Allow: GET, POST
429Retry-After: 60
503Retry-After: 300