GH GambleHub

Xato kodlari va best practices

1) Xatolarni nima uchun standartlashtirish kerak

Mijozlar uchun oldindan aytish mumkin: retrajlarning yagona formati va xulq-atvori.
Debagni tezlashtirish:’trace _ id ’/’ request _ id’, barqaror’error _ code’.
Xavfsizlik: SQL/stack traces/konfigi sizib chiqmaydi.
Kuzatilganlik: xatolar taksonomiyasi bo’yicha hisobot (validatsiya, kvotalar, taymautlar va boshqalar).

2) Bazaviy prinsiplar

1. Barcha 4xx/5xx uchun yagona javob formati (va 2xx uchun qisman xato - alohida sxema).
2. Aniq semantika HTTP: to’g’ri maqom eng muhimi.
3. Ikki darajali kod: transport (’status’) va domen barqaror’error _ code’.
4. Retriable vs Non-retriable: aniq ko’rsating va qo’ng’iroq qiling.
5. Andoza xavfsizlik: tafsilotlar - faqat huquqli mijoz uchun; ichki yo’llarsiz.
6. Mahalliylashtirish: mashina kodi barqaror bo’lib qoladi, matn tarjima qilinadi.

3) Xatoning yagona formati (RFC 7807 asosida)

Tavsiya etilgan JSON (kengaytirilgan’application/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"}
}

Majburiy:’type’,’title’,’status’,’error _ code’,’trace _ id’.
Ixtiyoriy:’errors []’,’retriable’,’hint’,’meta’.

Javobdagi sarlavhalar:
  • `Content-Type: application/problem+json`
  • `X-Request-ID`/`Traceparent` (W3C)
  • (429/503 uchun)’Retry-After’(soniya yoki sana)

4) HTTP maqomlari semantikasi («klassika» va amaliyotni birlashtirish)

2xx (nuanslar bilan muvaffaqiyat)

200 OK - oddiy muvaffaqiyat.
201 Created - yaratilgan resurs (Location).
202 Accepted - navbatda asinxron (bering’status _ url’).
207 Multi-Status - qisman muvaffaqiyat (iloji boʻlsa, qoching).

4xx (mijoz xatosi)

400 Bad Request - sintaksis/format, lekin maydon validatsiyasi emas (yaxshiroq 422).
401 Unauthorized - yoʻq/notoʻgʻri token. «WWW-Authenticate» ni oling.
403 Forbidden - token validen, lekin huquqlar yetarli emas (RBAC/ABAC/limitlar).
404 Not Found - resurs/endpoint mavjud emas.
409 Conflict - versiya/holat toʻqnashuvi (optimistic locking, idempotency).
410 Gone - endpoint abadiy olib tashlandi.
412 Precondition Failed - ETag/If-Match muvaffaqiyatsiz tugadi.
415 Unsupported Media Type - notoʻgʻri’Content-Type’.
422 Unprocessable Entity - biznes qoidalarining validatsiyasi.
429 Too Many Requests - kvotalar/tezlikdan oshib ketdi (§ 7 ga qarang).

5xx (server xatosi)

500 Internal Server Error - to’satdan xato; tafsilotlarni oshkor qilmaslik.
502 Bad Gateway - apstrim xatosi.
503 Service Unavailable - degradatsiya/qayta yuklash, bering’Retry-After’.
504 Gateway Timeout - orqa taymaut.

💡 Chegara: 4xx retraj emas, 5xx retraj qilish mumkin (backoff/jitter bilan), 429 - retray’retry-After’dan keyin.

5) Domen taksonomiyasi’error _ code ’

Quyidagi diapazonlar tavsiya etiladi:
  • ’AUTH _’ - autentifikatsiya/avtorizatsiya.
  • ’VAL _’ - kirish ma’lumotlarini validatsiya qilish.
  • ’RATELIMIT _’ - kvotalar va tezlik.
  • ’IDEMP _’ - idempotentlik/dublikatlar.
  • ’CONFLICT _’ - versiyalar/holat.
  • ’DEP _’ - bogʻliqlik (PSP/DNS/SMTP).
  • «PAY _» - to’lov domenining biznes xatolari.
  • ’SEC _’ - xavfsizlik (imzolar, HMAC, mTLS).
  • ’INT _’ - ichki to’satdan.
Talablar:
  • Vaqt barqarorligi (back-compat).
  • Xatolar katalogidagi tavsiflar va misollar (docs + machine-readable JSON).

6) Retriable vs Non-retriable

Maydonlar:
  • `retriable: true|false`
  • Agar’true’- albatta’Retry-After’(soniyada) yoki kontrakt «eksponensial bek-off (1-2 s, maks. 30-60 s)».

Retriable odatda:’502/503/504’, baʼzi’500’,’429’(oynadan keyin).
Non-retriable: `400/401/403/404/409/410/415/422`.

7) Rate limit & quota xatolari (429)

Tanasi:
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
}
Sarlavhalar:
  • `Retry-After: 12`
  • `X-RateLimit-Limit`, `X-RateLimit-Remaining`, `X-RateLimit-Reset`
  • Для квот: `X-Quota-Limit`, `X-Quota-Remaining`, `X-Quota-Reset`

8) Idempotentlik va nizolar

Yozuv so’rovlarida - «Idempotency-Key» (24-72 soat ichida noyob).
Qayta ishlash mojarosi → 409 Conflict s’error _ code: "IDEMP_REPLAY"'.
Resursning ETag → 412 Precondition Failed versiyasi mojarosi.
Javobda xavfsiz qayta soʻrash uchun’resource _ id ’/’ status _ url’ilova qiling.

9) Validatsiya va 422

Xatolar roʻyxatini qaytarish:
json
{
"status": 422,
"error_code": "VAL_001",
"errors": [
{"field":"email","code":"email_invalid","message":"Invalid email"},
{"field":"age","code":"min","message":"Must be >= 18"}
]
}
Qoidalar:
  • Biznes-validatsiya uchun xuddi shunday 400 - 422 ga takrorlamang.
  • Xabarlarni oʻqish mumkin;’code’- mashinada.

10) Xatolar xavfsizligi

Hech qachon: stack traces, SQL, fayl yoʻllari, shaxsiy xost nomlari.
PII tahrirlang; GDPR/DSAR’ni kuzatib boring.
Imzo uchun/NAMAS:’SEC _ SIGNATURE _ MISMATCH’(403) va’SEC _ TIMESTAMP _ SKEW’(401/403) ni «5 daqiqa ± vaqtni tekshiring».

11) Korrelyatsiya va kuzatish

Har doim’trace _ id ’/’ X-Request-ID’qoʻshing va loglar/trassalarga tashlang.
Xatolarni’error _ code’va’status’→ «top-xatolar», «new vs known» dashbordlari orqali birlashtiring.
Alertlar: 5xx/422/429, yashirin p95, share of errors.

12) gRPC/GraphQL/Webhooks - mappinglar

gRPC ↔ HTTP

gRPCQiymatiHTTP
`OK`muvaffaqiyat200
`INVALID_ARGUMENT`validatsiya422/400
`UNAUTHENTICATED`token yoʻq401
`PERMISSION_DENIED`huquqlar mavjud emas403
`NOT_FOUND`resurs yoʻq404
`ALREADY_EXISTS`mojaro409
`FAILED_PRECONDITION`ETAG/ogohlantirishlar412
`RESOURCE_EXHAUSTED`kvotalar429
`UNAVAILABLE`mavjud emas503
`DEADLINE_EXCEEDED`taymaut504
`INTERNAL`ichki500

GraphQL

Transport 200, lekin’errors []’ichida -’extensions’qoʻshing. code` и `trace_id`.
«Fatal» (autentifikatsiya/kvota) uchun - haqiqiy HTTP 401/403/429 yaxshiroqdir.

Webhooks

Faqat 2xx oluvchini muvaffaqiyatli deb hisoblang.
Eksponensial bek-off,’X-Webhook-ID’,’X-Signature’retralari.
Oluvchidan 410 - retrajni to’xtatish (endpoint o’chirilgan).

13) Xatolarni versiyalash

’type ’/’ error _ code’ - barqaror; Yangilarini faqat qoʻshish.
Tana sxemasini o’zgartirganda - API yoki’problem + json ning minor versiyasini ko’taring; v=2`.
Hujjatlar: kodlar jadvali + misollar; changelog xatolari.

14) Hujjatlar (OpenAPI parchalari)

Global javoblar

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 }

Endpoint misoli

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 sinovi va sifat

Kontrakt-testlar: muvofiqlik’application/problem + json’, majburiy maydonlar.
Negative tests: barcha tarmoqlar 401/403/404/ 409/422/429/500.
Chaos/latency: retraylarni 5xx/ 503/504/429 (’Retry-After’) da tekshirish.
Security tests: ichki xabar yo’qligi, to’g’ri PII niqobi.
Backward-compat: Eski mijozlar yangi maydonlarni tushunishadi (qo’shing, buzmang).

16) Joriy etish chek-varaqasi

  • Yagona’problem + json’+ barqaror’error _ code’.
  • Toʻgʻri semantika HTTP/gRPC/GraphQL.
  • Retriable/non-retriable +’Retry-After ’/back-off tavsiyalari.
  • Rate-limit sarlavhalari va 429 xatti-harakatlari.
  • Idempotentlik (’Idempotency-Key’, 409/412).
  • Xavfsizlik: stack traces/sirlarsiz, PII tahriri.
  • ’trace _ id ’/’ X-Request-ID’barcha xatolarda.
  • Xatolar katalogi hujjatlari va misollar.
  • Xatolar taksonomiyasi bo’yicha monitoring.
  • Salbiy stsenariylarning avtotestlari.

17) Mini-FAQ

422 dan 400 qanday farq qiladi?
400 - singan so’rov (sintaksis/tarkib turi). 422 - sintaksis bo’yicha haqiqiy, ammo biznes-qoidalar o’tmadi.

Qachon 401, qachon 403?
401 - yo’q/noto’g "ri token; 403 - token bor, huquqlar yetarli emas.

Har doim’Retry-After’kerakmi?
429/503 uchun - ha; qolganlari uchun retriable - aniq tavsiya berish maqsadga muvofiqdir.

Jami

Yaxshi ishlab chiqilgan xatolar - bu to’g’ri HTTP maqomi, yagona’problem + json’, barqaror’error _ code’, retrajlar bo’yicha aniq maslahatlar va qat’iy xavfsizlik. Formatni standartlashtiring, taksonomiyani hujjatlashtiring, telemetriya va testlarni qo’shing va APIingiz oldindan aytib bo’ladigan, xavfsiz va integratorlarga do’stona bo’ladi.

Contact

Biz bilan bog‘laning

Har qanday savol yoki yordam bo‘yicha bizga murojaat qiling.Doimo yordam berishga tayyormiz.

Telegram
@Gamble_GC
Integratsiyani boshlash

Email — majburiy. Telegram yoki WhatsApp — ixtiyoriy.

Ismingiz ixtiyoriy
Email ixtiyoriy
Mavzu ixtiyoriy
Xabar ixtiyoriy
Telegram ixtiyoriy
@
Agar Telegram qoldirilgan bo‘lsa — javob Email bilan birga o‘sha yerga ham yuboriladi.
WhatsApp ixtiyoriy
Format: mamlakat kodi va raqam (masalan, +998XXXXXXXX).

Yuborish orqali ma'lumotlaringiz qayta ishlanishiga rozilik bildirasiz.