Epinpark

Hata Formatı

Bir uç noktaya ulaşan isteklerin hata yanıtları RFC 7807 standardında, application/problem+json content-type ile döner.

Gövdesiz dönen durumlar

401, 403, bilinmeyen yola atılan 404 ve desteklenmeyen metotta 405 yanıt gövdesiz gelir; ayrıntı yalnızca HTTP durum kodudur.

401 ve 403'te bu kasıtlıdır: imzanın mı, zaman damgasının mı, yoksa anahtarın kendisinin mi sorunlu olduğunu söylemek, anahtarın sistemde var olup olmadığını dışarıya sızdırır. Bu yüzden bütün kimlik doğrulama hataları birbirinden ayırt edilemez. Hangi uç noktanın hangi scope'u istediği İzinler sayfasında listelidir; 403 alıyorsanız anahtarınızın yetkilerini oradan karşılaştırın.

İstemcinizde gövdeyi ayrıştırmadan önce boş olup olmadığını kontrol edin.

Yanıt yapısı

Genel şema
{
  "type": "https://api.epinpark.com/problems/<kod>",
  "title": "Kısa, insan okunabilir başlık",
  "status": 400,
  "detail": "Spesifik açıklama",
  "code": "validation-error",
  "errors": {
    "Page": ["Page must be greater than or equal to 1."]
  }
}

Alan açıklamaları

AlanHer yanıttaAçıklama
typeevetHata tipi URI'si (kategori belirleme için)
titleevetKısa, sabit başlık
statusevetHTTP status code
codehayırProgramatik karar için kısa kod. İş kuralı ve kaynak hatalarında bulunur; parametre doğrulama hatalarında (400) bulunmaz — orada errors alanına bakın
detailhayırBu spesifik hata için açıklama
errorshayırParametre doğrulama hatalarında alan başına mesajlar
instance, traceId, correlationIdhayırBazı yanıtlarda bulunur; korelasyon için X-Request-Id yanıt header'ını kullanın — o her yanıtta var

Parametre doğrulama hatasının tipi farklı

Sayfalama, sıralama ve filtre parametrelerindeki hatalar (400) type alanında RFC 9110 bağlantısı taşır ve code içermez; anlatan alan errors'tur. Diğer bütün hatalarda type yukarıdaki https://api.epinpark.com/problems/<code> biçimindedir.

HTTP status code'lar

CodeAnlamTipik kullanım
400Bad RequestValidasyon hatası (eksik/yanlış parametre)
401UnauthorizedHMAC header eksik, imza hatalı, timestamp tolerans dışı
403ForbiddenAPI key'de gerekli scope yok
404Not FoundKaynak bulunamadı veya başka bir satıcıya ait
409ConflictMevcut state ile çakışma (örn. zaten fulfilled sipariş)
413Payload Too LargeMultipart upload sınırı aşıldı
422Unprocessable EntityDomain validation hatası
429Too Many RequestsHız sınırı aşıldı (Retry-After header'ı var)
500Internal Server ErrorBeklenmedik sunucu hatası
502Bad GatewayDownstream servisten geçersiz yanıt
503Service UnavailableDownstream servise ulaşılamıyor

404 ile 403 ayrımı

Başka bir satıcıya ait bir kaynağa erişmeye çalıştığınızda yanıt 403 değil 404 döner. Bu kasıtlıdır — kaynağın varlığını veya sahibini sızdırmamak için.

Hata tipleri kataloğu

Type URI sonuStatusAçıklama
invalid-idempotency-key400Idempotency-Key formatı uygun değil (max 64 char, alfanumerik + -_)
resource-not-found404Path ile belirtilen ID'de kaynak yok veya size ait değil
conflict409Domain state çakışması (örn. zaten cancelled order item)
domain-rule-violation422İş kuralı ihlali
rate-limit-exceeded429Hız limiti aşıldı
internal-error500Beklenmedik sunucu hatası
upstream-unavailable502/503/504Downstream servis erişilemez

İş kuralına özgü kodlar

409 ve 422 yanıtlarında code alanı yukarıdaki genel değerler yerine kuralın kendi adını taşıyabilir — örneğin invoice-already-exists, claim-not-waiting-seller, order-item-not-cancellable. Bunlar da aynı biçimdedir: type alanı https://api.epinpark.com/problems/<code> olur. Karar verirken code alanını kullanın; title ve detail insan okunabilir metinlerdir ve değişebilir.

Hata yönetimi örneği

Validasyon hatası örneği

400 Bad Request
{
  "type": "https://tools.ietf.org/html/rfc9110#section-15.5.1",
  "title": "One or more validation errors occurred.",
  "status": 400,
  "errors": {
    "page": ["Page must be greater than or equal to 1."],
    "pageSize": ["PageSize must be between 10 and 100."],
    "orderBy": ["OrderBy must be one of: CreatedAt."]
  }
}

correlationId nedir?

Her isteğe sunucu tarafından otomatik atanan benzersiz bir kimliktir ve X-Request-Id yanıt header'ında döner. Hata raporlarken bu değeri paylaşın — Epinpark loglarından isteğinizi 1 saniyede bulabiliriz.

Kendi correlation ID'nizi de gönderebilirsiniz:

X-Request-Id: my-app-trace-abc123

Bu durumda yanıt header'ında da aynı değer döner.