API Guides

Error Model

HTTP hata formatı, status code yorumlama ve retry stratejisi

Error Model

Allmine API HTTP hataları BaseResponseDto formatının hata varyantıyla döner. Client iş mantığı errors içindeki metinlere değil, HTTP status code'a ve endpoint bağlamına göre karar vermelidir.

Hata response şekli

{
  "isSuccess": false,
  "statusCode": 400,
  "errors": [
    "title should not be empty"
  ],
  "timestamp": "2026-05-21T10:00:00.000Z"
}

data alanı hata response'larında beklenmemelidir. errors her zaman array gibi ele alınmalıdır; tek hata da array içinde gelir.

Lokalizasyon

Request context middleware x-language veya Accept-Language header'ından dili belirler. Client, kullanıcı dili belliyse her request'te açık header göndermelidir.

x-language: tr
Accept-Language: tr-TR,tr;q=0.9,en;q=0.8

Status code anlamları

StatusAnlamClient davranışı
400Validation veya iş kuralı hatasıForm/ekran üzerinde errors gösterilir. Otomatik retry yapılmaz.
401Access token eksik, geçersiz veya süresi dolmuşRefresh token ile bir kez yenile, sonra isteği tekrar dene.
403Kullanıcının role/izin durumu uygun değilKullanıcıya erişim hatası gösterilir. Retry yapılmaz.
404Kayıt bulunamadıDetay ekranı kapatılır veya boş state gösterilir.
409Mevcut durum işlem için uygun değilEkran state'i yenilenir. Örnek: yayın aktif değil, yayın tamamlanmış.
500Beklenmeyen backend hatasıKısa retry veya hata ekranı. Kullanıcı girdisini kaybetme.
503Bakım modu veya geçici servis problemiBakım/tekrar dene mesajı gösterilir.

Auth hatası için önerilen akış

  1. Protected request 401 döner.
  2. Client refresh token ile POST /api/v1/auth/refresh çağırır.
  3. Refresh başarılıysa orijinal request bir kez tekrar edilir.
  4. Refresh de 401 dönerse local auth state temizlenir ve login ekranına dönülür.

Aynı anda birden fazla request 401 alırsa refresh çağrısı tekilleştirilmelidir.

let refreshPromise: Promise<void> | null = null;

async function refreshOnce() {
  if (!refreshPromise) {
    refreshPromise = auth.refresh().finally(() => {
      refreshPromise = null;
    });
  }

  return refreshPromise;
}

Validation hataları

Global validation pipe whitelist, forbidNonWhitelisted ve transform ile çalışır. Bu nedenle:

  • Tanımlı olmayan body alanları hata üretebilir.
  • Query parametreleri DTO tiplerine dönüştürülebilir.
  • page, limit, numeric alanlar string gönderilse bile backend'de number'a çevrilebilir; yine de client kendi tipini düzgün göndermelidir.

Socket hataları

WebSocket event'leri HTTP hata wrapper'ını kullanmaz. Örneğin /live-stream-status subscribe hataları şu şekilde gelir:

{
  "code": "TOKEN_INVALID",
  "message": "Geçersiz veya süresi dolmuş token"
}

Socket tarafında da karar code üzerinden verilmelidir.

On this page