GH GambleHub

Рамзҳои хатогии API ва таҷрибаи пешқадам

1) Чаро хатогиҳоро стандартӣ кунед

Пешгӯӣ барои муштариён: формати ягона ва рафтори ретрас.
Шитоби ислоҳи хатоҳо: 'trace _ id '/' request _ id', устувор 'хатогӣ _ код'.
Амният: Пайҳо/конфигуратсияҳои SQL/stack ихроҷ намешаванд.
Мушоҳида: ҳисобот дар бораи таксономияи хатогӣ (санҷиш, квота, танаффус ва ғайра).

2) Принсипҳои асосӣ

1. Формати ягонаи посух барои ҳама 4xx/5xx (ва барои 2xx бо хатогиҳои қисман - нақшаи алоҳида).
2. Семантикаи HTTP тоза кунед: мақоми дуруст муҳимтарин аст.
3. Ду сатҳи рамз: нақлиёт ('статус') ва домени устувор 'хатогӣ _ код'.
4. Retriable vs Retriable: ба таври возеҳ муайян кунед ва дар бораи бозгашт ишора кунед.
5. Амнияти пешфарз: тафсилот - танҳо ба мизоҷе, ки ҳуқуқ дорад; бе нишонаҳои дохилӣ.
6. Маҳаллисозӣ: коди мошин устувор боқӣ мемонад, матн - мо тарҷума мекунем.

3) Формати хатогии ягона (дар асоси RFC 7807)

JSON-и тавсияшуда (васеъ 'ариза/мушкилот + 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"}
}

Талаб карда мешавад: 'type', 'title', 'status', 'хатогӣ _ код', 'trace _ id'.
Ихтиёрӣ: 'хатогиҳо []' (аз рӯи майдонҳо), 'бозгардонидан', 'ишора', 'мета'.

Сарлавҳаҳо дар ҷавоб:
  • 'Намуди мундариҷа: барнома/мушкилот + json'
  • 'X-Request-ID '/' Traceparent' (W3C)
  • (барои 429/503) 'Retry-After' (сония ё сана)

4) Семантикаи статусҳои HTTP (якҷоя кардани "классикӣ" ва амалия)

2xx (муваффақияти нозук)

200 OK муваффақияти муштарак аст.
201 Офарида - макон.
202 Қабул карда шуд - асинхронӣ дар навбат (додани 'status _ url').
207 Multi-Status - муваффақияти қисман (агар имкон бошад, пешгирӣ кунед).

4xx (хатои муштарӣ)

400 Дархости бад - синтаксис/формат, аммо тасдиқи майдон (беҳтараш 422).

401 беиҷозат - аломати беэътибор. Биёед 'WWW-Аутентификатсия кунем.'

403 мамнӯъ - нишона эътибор дорад, аммо ҳуқуқҳои кофӣ вуҷуд надоранд (RBAC/ABAC/маҳдудиятҳо).
404 Ёфт нашуд - манбаъ/нуқтаи ниҳоӣ нест.
409 Низоъ - қулфи оптималӣ, аблаҳӣ.
410 Gone - нуқтаи ниҳоӣ ба таври доимӣ хориҷ карда шуд.
412 Хатогии пешакӣ - ET bag/If-Match ноком шуд.
415 Намуди ВАО-и дастгирӣнашаванда - 'Намуди мундариҷа'.
422 Субъекти бебозгашт - тасдиқи қоидаҳои тиҷорат.
429 Дархостҳои аз ҳад зиёд - аз квота/суръат зиёдтар (ниг. § 7).

5xx (хатои сервер)

500 Хатои сервери дохилӣ - хатои ногаҳонӣ; тафсилотро ифшо накунад.
502 Дарвозаи бад - Хатои болооб.
503 Хизматрасонӣ дастнорас аст - таназзул/изофабор, ба 'Retry-After' диҳед.
504 Вақти танаффуси дарвоза - танаффуси ақиб.

💡 Ҳадди ниҳоӣ: 4xx retrayem нест, 5xx бозгардонида мешавад (backoff/jitter), 429 пас аз 'Retry-After' бозпас гирифта мешавад.

5) Домени таксономия 'хато _ рамз'

Мо диапазонҳои зеринро тавсия медиҳем:
  • 'AUTH _' - аутентификатсия/авторизатсия.
  • 'VAL _' - тасдиқи маълумоти вуруд.
  • 'RATELIMIT _' - квотаҳо ва суръат.
  • 'IDEMP _' - idempotence/такрорӣ.
  • 'НИЗОЪ _' - версияҳо/ҳолат.
  • 'DEP _' - вобастагӣ (PSP/DNS/SMTP).
  • 'PAY _' - хатогиҳои тиҷоратии домени пардохт.
  • 'SEC _' - амният (имзоҳо, HMAC, MTLS).
  • 'INT _' - ногаҳон дохилӣ.
Талабот:
  • Устуворӣ бо мурури замон (back-compat).
  • Тасвирҳо ва намунаҳо дар феҳристи хатогӣ (ҳуҷҷатҳо + JSON-и хонданашаванда).

6) Retriable vs Non-retriable

Майдонҳо:
  • 'retriable: ҳақиқӣ' false '
  • Агар "дуруст" - ҳатман "Retry-After" (бо сонияҳо) ё шартнома "бозгашти экспоненсиалӣ (аз 1-2 с, макс 30-60 с)".

Одатан қобили қабул аст: '502/503/504', баъзе '500', '429' (пас аз тиреза).
Интиқолнашаванда: '400/401/403/404/ 409/410/415/422'.

7) Хатогиҳои меъёри & квота (429)

Ҷисм:
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
}
Унвонҳо:
  • 'Бозсозӣ: 12'
  • 'Х-Меъёри Лимит-Лимит', 'X-Меъёри Лимити-боқимонда', 'X-Rate-Limit-Reset'
  • Для квот: 'X-квота-лимит', 'X-квота-боқимонда', 'X-квота-барқароркунӣ'

8) Идемпотентсия ва низоъҳо

Дар дархостҳои хаттӣ - 'Idempotency-Key' (беназир дар давоми 24-72 соат).
Низоъро такрор кунед → 409 Низоъ бо 'error _ code: "IDEMP_REPLAY"'.
Ихтилофи версияи захираҳо барои ET to 412 Precondition ноком шуд.
Дар посух, a 'resource _ id '/' status _ url' -ро барои дархости такрории бехатар замима кунед.

9) Санҷиш ва 422

Рӯйхати хатогиҳоро аз рӯи майдон баргардонед:
json
{
"status": 422,
"error_code": "VAL_001",
"errors": [
{"field":"email","code":"email_invalid","message":"Invalid email"},
{"field":"age","code":"min","message":"Must be >= 18"}
]
}
Қоидаҳо:
  • Инро дар 400 - 422, ки барои тасдиқи тиҷорат бартарӣ доранд, такрор накунед.
  • Паёмҳо барои инсон қобили хондан мебошанд; 'код' қобили хондан аст.

10) Амнияти хато

Ҳеҷ гоҳ: пайгирии анборҳо, SQL, роҳҳои файл, номҳои мизбони хусусӣ.
Таҳрири PII; ба GDPR/DSAR нигоҳ кунед.
Барои имзо/HMAC, байни 'SEC _ SIGNATURE _ MISMATCH' (403) ва 'SEC _ TIMESTAMP _ SKEW' (401/403) бо дархости "вақти 5 дақиқа санҷед" фарқ кунед.

11) Таносуб ва мушоҳида

Ҳамеша 'trace _ id '/' X-Request-ID' -ро илова кунед ва тавассути гузоришҳо/роҳҳо ҳаракат кунед.
Хатогиҳои ҷамъбастии 'error _ code' and 'status' → панели панели "хатогиҳои болоӣ", "нав против маълум".
Огоҳӣ: 5xx/422/429 хӯша, p95 дермонӣ, ҳиссаи хатогиҳо.

12) GRPC/GraphL/Webhooks - харитасозӣ

GRPC ↔ HTTP

GRPCАрзишHTTP
'ОК.АПОСмуваффақият200
'НОМУВОФИҚ _ АРГУМЕНТБАПОСтасдиқкунӣ422/400
'UNAUTHENTICATEPOSнишонае нест401
'ИҶОЗАТ _ ДЕНИЕДЖАПОСҳуқуқ надорад403
'НО _ ФАУНДЖАПОСягон захира нест404
'АЛЛАКАЙ _ EXISTS' АПОСнизоъ409
'НОКОМ _ ПЕШГУФТОР' АПОСET bag/шартҳои пешакӣ412
'RESOURCE _ EXHAUSTEPOSквотаҳо429
'УНАВАЙЛАБЛЕ АПОСДастнорас аст503
'МӮҲЛАТИ НИҲОӢ _ EXCEED.TAPOSвақти таътил504
'ИНТЕРНАЛБАПОСдохилӣ500

Диаграммаи QL

Интиқол 200, аммо 'хатогиҳо []' дар дохили - изофаи изофӣ. рамзи 'i' trace _ id '.
Барои "марговар" (аутентификатсия/квота) - як HTTP воқеӣ беҳтар аст.

Webhooks

Танҳо 2xx гирандаро бомуваффақият баррасӣ кунед.
Retrai бо бозгашти экспоненсиалӣ, 'X-Webhook-ID', 'X-Signature'.
410 аз қабулкунанда - бозпас гирифтани таваққуф (нуқтаи ниҳоӣ хориҷ карда шудааст).

13) Таҳрири хатогӣ

'type '/' хатогӣ _ код' - устувор; нав - танҳо илова кунед.
Ҳангоми тағир додани схемаи бадан, версияи ночизи API ё 'мушкилот + json; v = 2 '.
Ҳуҷҷатгузорӣ: ҷадвали рамз + намунаҳо; хатогиҳои changelog.

14) Ҳуҷҷатгузорӣ (Порчаҳои кушодаи API)

Ҷавобҳои глобалӣ

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 }

Намунаи нуқтаи ниҳоӣ

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) Озмоиш ва сифат

Шартномаи санҷишӣ: мувофиқати 'ариза/мушкилот + json', майдонҳои зарурӣ.
Санҷишҳои манфӣ: ҳамаи шохаҳо 401/403/404/ 409/422/429/500.
Бесарусомонӣ/таъхир: тафтиши ретрейҳо барои 5xx/ 503/504/429 ('Retry-After').
Санҷишҳои амниятӣ: ҳеҷ паёмҳои дохилӣ, ниқоби дурусти PII.
Қафо-муқоиса: Мизоҷони кӯҳна майдонҳои навро мефаҳманд (илова кунед, шикаста нашавед).

16) Рӯйхати санҷиши амалисозӣ

  • Ягона 'мушкилот + json' + устувор 'хатогӣ _ код'.
  • Семантикаи дурусти HTTP/g
  • Тавсияҳои қобили қабул/интиқолнашаванда + 'Retry-After '/бозгашт.
  • Сарлавҳаҳои маҳдудият ва рафтори 429.
  • Idempotency ('Idempotency-Key', 409/412).
  • Амният: пайгирӣ/асрори анбор, нашри PII.
  • 'trace _ id '/' X-Request-ID' дар ҳама хатогиҳо.
  • Ҳуҷҷатҳо ва намунаҳои каталоги хато.
  • Мониторинг бо хатогии таксономия.
  • Автотестҳои сенарияҳои манфӣ.

17) Мини-FAQ

400 аз 422 чӣ фарқ дорад?
400 - дархости шикаста (навъи синтаксис/мундариҷа). 422 - дар синтаксис эътибор дорад, аммо қоидаҳои тиҷорат нагузаштанд.

401 кай ва 403 кай аст?
401 - аломати нодуруст/нодуруст; 403 - нишонае ҳаст, ҳуқуқҳои кофӣ нестанд.

Оё 'Retry-After' always лозим аст?
Барои 429/503, бале; барои боқимонда, бозгардонидан - тавсия дода мешавад, ки тавсияи возеҳ дода шавад.

Ҷамъ

Хатогиҳои хуб тарҳрезишуда шартнома мебошанд: ҳолати дурусти HTTP, ягона 'мушкилот + json', устувории 'хатогӣ _ код', маслиҳатҳои дақиқ ва амнияти қавӣ. Форматро стандартӣ кунед, таксономияро ҳуҷҷатгузорӣ кунед, телеметрия ва санҷишҳоро илова кунед - ва API-и шумо пешгӯишаванда, бехатар ва интегратор мегардад.

Contact

Тамос гиред

Барои саволҳо е дастгирӣ ба мо муроҷиат кунед.Мо ҳамеша омодаем!

Telegram
@Gamble_GC
Оғози интегратсия

Email — муҳим аст. Telegram е WhatsApp — ихтиерӣ.

Номи шумо ихтиерӣ
Email ихтиерӣ
Мавзӯъ ихтиерӣ
Паем ихтиерӣ
Telegram ихтиерӣ
@
Агар Telegram нависед — ҷавобро ҳамон ҷо низ мегиред.
WhatsApp ихтиерӣ
Формат: рамзи кишвар + рақам (масалан, +992XXXXXXXXX).

Бо фиристодани форма шумо ба коркарди маълумот розӣ ҳастед.