GH GambleHub

API hata kodları ve en iyi uygulamalar

1) Hataları neden standartlaştırın

Müşteriler için öngörülebilirlik: tek bir format ve retras davranışı.
Hata ayıklama hızlandırması: 'trace _ id'/' request _ id', kararlı 'error _ code'.
Güvenlik: SQL/stack traces/configurs sızıntı yapmaz.
Gözlemlenebilirlik: Hata taksonomisi hakkında raporlama (doğrulama, kotalar, zaman aşımları vb.).

2) Temel ilkeler

1. Tüm 4xx/5xx için tek bir yanıt biçimi (ve 2xx için kısmi hatalarla - ayrı bir şema).
2. HTTP semantiğini temizleyin: doğru durum en önemlisidir.
3. İki kod düzeyi: taşıma ('durum') ve etki alanı kararlı 'error _ code'.
4. Yeniden başlatılabilir vs Yeniden başlatılamaz: açıkça belirtin ve geri alma hakkında bir ipucu verin.
5. Varsayılan güvenlik: ayrıntılar - yalnızca hakları olan istemciye; İç izleri olmadan.
6. Yerelleştirme: makine kodu sabit kalır, metin - çeviririz.

3) Tek hata formatı (RFC 7807 tabanlı)

Önerilen JSON (genişletilmiş 'uygulama/problem + json'):
json
{
"type": "https://api. example. com/errors/validation_failed",
"title": "Validation failed",
"status": 422,
"error_code": "VAL_001",
"detail": "Field 'email' must be a valid address",
"instance": "req_01HZY...93",
"trace_id": "a1b2c3d4e5f6",
"retriable": false,
"errors": [
{"field": "email", "code": "email_invalid", "message": "Invalid email"}
],
"hint": "Fix payload and retry",
"meta": {"docs": "https://docs. example. com/errors#VAL_001"}
}

Gerekli: 'type', 'title', 'status', 'error _ code', 'trace _ id'.
İsteğe bağlı: 'errors []' (alanlara göre), 'receivable', 'ipucu', 'meta'.

Yanıt olarak başlıklar:
  • 'Content-Type: application/problem + json'
  • 'X-Request-ID'/' Traceparent' (W3C)
  • (429/503 için) 'Retry-After' (saniye veya tarih)

4) HTTP durumlarının semantiği ("klasikleri've pratiği birleştirmek)

2xx (nüanslı başarı)

200 OK ortak bir başarıdır.
201 Oluşturuldu - Yer.
202 Kabul edildi - kuyrukta eşzamansız olarak ('status _ url' verin).
207 Çoklu Durum - kısmi başarı (mümkünse kaçının).

4xx (istemci hatası)

400 Bad Request - sözdizimi/format, ancak alan doğrulaması değil (tercihen 422).
401 Yetkisiz - hayır/geçersiz belirteç. Hadi 'WWW-Authenticate' yapalım.
403 Yasak - belirteç geçerlidir, ancak yeterli hak yoktur (RBAC/ABAC/limitleri).
404 Bulunamadı - kaynak/uç nokta yok.
409 Çatışma - optimal kilitleme, idempotency.
410 Gitti - uç nokta kalıcı olarak kaldırıldı.
412 Önkoşul Başarısız - ETag/If-Match başarısız oldu.
415 Desteklenmeyen Ortam Türü - Geçersiz 'İçerik Türü'.
422 İşlenemez Varlık - iş kurallarının geçerliliği.
429 Çok Fazla İstek - kotaları/hızı aştı (bkz. § 7).

5xx (sunucu hatası)

500 Dahili Sunucu Hatası - ani hata; Detayları açıklamamak.
502 Kötü Ağ Geçidi - Yukarı Akış Hatası.
503 Servis Kullanılamıyor - bozulma/aşırı yükleme, 'Retry-After' verin.
504 Gateway Timeout - arka uç zaman aşımı.

💡 Eşik: 4xx retrayem değil, 5xx geri çekilebilir (backoff/jitter), 429 'Retry-After'dan sonra retraye.

5) Etki alanı taksonomisi 'error _ code'

Aşağıdaki aralıkları öneririz:
  • 'AUTH _' - kimlik doğrulama/yetkilendirme.
  • 'VAL _' - giriş verilerinin doğrulanması.
  • 'RATELIMIT _' - kotalar ve hız.
  • 'IDEMP _' - idempotence/kopyalar.
  • 'CONFLICT _' - sürümler/durum.
  • 'DEP _' - bağımlılıklar (PSP/DNS/SMTP).
  • 'PAY _' - ödeme alanının iş hataları.
  • 'SEC _' - güvenlik (imzalar, HMAC, mTLS).
  • 'INT _' - dahili ani.
Gereksinimler:
  • Zaman içinde stabilite (back-compat).
  • Hata dizinindeki açıklamalar ve örnekler (docs + machine-readable JSON).

6) Yeniden başlatılabilir vs Yeniden başlatılamaz

Alanlar:
  • 'tekrarlanabilir: true' felse '
  • Eğer 'doğru' - mutlaka 'Retry-After' (saniye olarak) veya sözleşme "üstel geri dönüş (1-2 s'den başlayarak, maksimum 30-60 s)".

Genellikle yeniden kullanılabilir: '502/503/504', bazı '500', '429' (pencereden sonra).
Yeniden kullanılamaz: '400/401/403/404/ 409/410/415/422'.

7) Fiyat sınırı ve kota hataları (429)

Vücut:
json
{
"type": "https://api. example. com/errors/rate_limited",
"title": "Rate limit exceeded",
"status": 429,
"error_code": "RATELIMIT_RPS",
"detail": "Too many requests",
"retriable": true
}
Başlıklar:
  • 'Retry-After: 12'
  • 'X-RateLimit-Limit', 'X-RateLimit-Kalan', 'X-RateLimit-Yeniden'
  • Для квот: 'X-Kota-Sınırı', 'X-Kota-Kalan', 'X-Kota-Kalan'

8) İdempotans ve çatışmalar

Yazma taleplerinde - 'Idempotency-Key' (24-72 saat içinde benzersiz).
Çakışmayı yeniden dene> 409 'error _ code ile çakışma: "IDEMP_REPLAY"'.
ETag için kaynak sürüm çakışması - 412 Önkoşul Başarısız.
Yanıtta, güvenli bir yeniden istek için bir 'resource _ id'/' status _ url' ekleyin.

9) Doğrulama ve 422

Hataların bir listesini alana göre döndürün:
json
{
"status": 422,
"error_code": "VAL_001",
"errors": [
{"field":"email","code":"email_invalid","message":"Invalid email"},
{"field":"age","code":"min","message":"Must be >= 18"}
]
}
Kurallar:
  • İş doğrulaması için tercih edilen 400 - 422'de aynısını çoğaltmayın.
  • Mesajlar insan tarafından okunabilir; 'kod' makine tarafından okunabilir.

10) Hata güvenliği

Asla: yığın izleri, SQL, dosya yolları, özel ana bilgisayar adları.
PII'yi düzenleyin; Gözünüz GDPR/DSAR'da olsun.
İmza/HMAC için, 'SEC _ SIGNATURE _ MISMATCH' (403) ve 'SEC _ TIMESTAMP _ SKEW' (401/403) arasında "check ± time 5 min" komutu ile ayrım yapın.

11) Korelasyon ve gözlemlenebilirlik

Her zaman 'trace _ id'/' X-Request-ID' ekleyin ve günlükler/parçalar arasında ilerleyin.
Hataları 'error _ code've' status'tarafından toplayın - panolar'en üst hatalar ",'yeni vs bilinen".
Uyarılar: 5xx/422/429 spike, p95 gecikme, hata payı.

12) gRPC/GraphQL/Webhooks - eşlemeler

gRPC ↔ HTTP

gRPCDeğerHTTP
'TAMAM'Başarı200
'GEÇERSIZ _ ARGÜMAN'Doğrulama422/400
'ONAYLANMADI'belirteç yok401
'PERMISSION _ DENIED'Hakları yok403
'DEĞİL _ VAKIF'kaynak yok404
'ZATEN _ VARLIKLAR'Çatışma409
'BAŞARILAMADI _ ÖN KOŞUL'ETag/ön koşullar412
'KAYNAK _ TÜKETİN'kotalar429
'ULAŞILAMADI'Kullanılamayan503
'DEADLINE _ EXCEEDED'Zaman aşımı504
'İÇ'Dahili500

GraphQL

Ulaşım 200, ama 'dehşet []' içinde - ekle 'extensions. Kod 'и' trace _ id '.
"Ölümcül" (kimlik doğrulama/kotalar) için - gerçek bir HTTP 401/403/429 daha iyidir.

Webhooks

Sadece 2xx alıcılarının başarılı olduğunu düşünün.
Üstel geri kapatma, 'X-Webhook-ID', 'X-Signature'ile Retrai.
Alıcıdan 410 - stop retray (uç nokta kaldırıldı).

13) Hata sürümü oluşturma

'type'/' error _ code' - kararlı; yeni - sadece ekle.
Gövde şemasını değiştirirken, API'nin küçük sürümünü veya 'problem + json; v = 2 '.
Belgeler: kod tablosu + örnekler; Changelog hataları.

14) Dokümantasyon (OpenAPI parçaları)

Global yanıtlar

yaml components:
responses:
Problem:
description: Problem Details content:
application/problem+json:
schema:
$ref: '#/components/schemas/Problem'
schemas:
Problem:
type: object required: [type, title, status, error_code, trace_id]
properties:
type: { type: string, format: uri }
title: { type: string }
status: { type: integer }
error_code: { type: string }
detail: { type: string }
instance: { type: string }
trace_id: { type: string }
retriable: { type: boolean }
errors:
type: array items:
type: object properties:
field: { type: string }
code: { type: string }
message: { type: string }

Bir uç nokta örneği

yaml paths:
/v1/users:
post:
responses:
'201': { description: Created }
'401': { $ref: '#/components/responses/Problem' }
'422': { $ref: '#/components/responses/Problem' }
'429': { $ref: '#/components/responses/Problem' }
'500': { $ref: '#/components/responses/Problem' }

15) Test ve kalite

Test sözleşmesi: maç 'uygulama/problem + json', gerekli alanlar.
Negatif testler: tüm dallar 401/403/404/ 409/422/429/500.
Kaos/gecikme: 5xx/ 503/504/429 ('Retry-After') için retrays denetimi.
Güvenlik testleri: dahili mesaj yok, doğru PII maskesi.
Geriye dönük compat: Eski müşteriler yeni alanları anlar (ekle, kırma).

16) Uygulama kontrol listesi

  • Tek 'problem + json' + kararlı 'error _ code'.
  • Doğru HTTP/gRPC/GraphQL semantiği.
  • Retriable/non-retriable + 'Retry-After'/back-off önerileri.
  • Hız sınırı başlıkları ve 429 davranışı.
  • Idempotency ('Idempotency-Key', 409/412).
  • Güvenlik: hiçbir yığın izleri/sırları, PII sürümü.
  • Tüm hatalarda 'trace _ id'/' X-Request-ID'.
  • Hata kataloğu belgeleri ve örnekler.
  • Hata taksonomisi ile izleme.
  • Olumsuz senaryoların ototestleri.

17) Mini-SSS

400'ün 422'den ne farkı var?
400 - kırık istek (sözdizimi/içerik türü). 422 - sözdiziminde geçerli, ancak iş kuralları geçmedi.

401 ne zaman ve 403 ne zaman?
401 - hayır/yanlış belirteç; 403 - bir belirteç var, yeterli hak yok.

'Retry-After'her zaman gerekli midir?
429/503 için evet; Geri kalanı için, yeniden kullanılabilir - açık bir öneri verilmesi tavsiye edilir.

Toplam

İyi tasarlanmış hatalar sözleşmedir: doğru HTTP durumu, tek 'problem + json', kararlı 'error _ code', açık retray ipuçları ve güçlü güvenlik. Formatı standartlaştırın, taksonomiyi belgeleyin, telemetri ve testler ekleyin - böylece API'niz öngörülebilir, güvenli ve entegratör dostu hale gelir.

Contact

Bizimle iletişime geçin

Her türlü soru veya destek için bize ulaşın.Size yardımcı olmaya her zaman hazırız!

Telegram
@Gamble_GC
Entegrasyona başla

Email — zorunlu. Telegram veya WhatsApp — isteğe bağlı.

Adınız zorunlu değil
Email zorunlu değil
Konu zorunlu değil
Mesaj zorunlu değil
Telegram zorunlu değil
@
Telegram belirtirseniz, Email’e ek olarak oradan da yanıt veririz.
WhatsApp zorunlu değil
Format: +ülke kodu ve numara (örneğin, +90XXXXXXXXX).

Butona tıklayarak veri işlemenize onay vermiş olursunuz.