GH GambleHub

API ката коддору жана best practices

1) Эмне үчүн каталарды стандартташтыруу

кардарлар үчүн алдын ала: бирдиктүү формат жана retrains жүрүм-туруму.
Дебагды тездетүү: 'trace _ id '/' request _ id', туруктуу 'error _ code'.
Коопсуздук: SQL/stack traces/конфиги агып жок.
Байкоо: каталардын таксономиясы боюнча отчеттуулук (валидация, квота, таймауттар ж.б.).

2) Негизги принциптер

1. Бардык 4xx/5xx үчүн бирдиктүү жооп форматы (жана 2xx үчүн жарым-жартылай каталар өзүнчө схема).
2. Так семантика HTTP: туура статусу маанилүү болуп саналат.
3. Эки деңгээл коду: транспорт ('status') жана туруктуу домен 'error _ code'.
4. Retriable vs Non-retriable: ачык-айкын көрсөтүп, бэк-оффко бир эскертүү бериңиз.
5. демейки коопсуздук: маалымат - укуктар менен кардар гана; ички жолдору жок.
6. Локализация: машина коду туруктуу бойдон калууда, текст - которуу.

3) Бирдиктүү ката формат (RFC 7807 негизинде)

Сунушталган JSON (Advanced '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"}
}

Милдеттүү: 'type', 'title', 'status', 'error _ code', 'trace _ id'.
Кошумча: 'errors []' (талаалар боюнча), 'retriable', 'hint', 'meta'.

Жооптогу аталыштар:
  • `Content-Type: application/problem+json`
  • `X-Request-ID`/`Traceparent` (W3C)
  • (429/503 үчүн) 'Retry-After' (секунд же датасы)

4) HTTP статустарынын семантикасы ("классика" жана практиканы бириктирүү)

2xx (нюанстар менен ийгилик)

200 OK - кадимки ийгилик.
201 Created - түзүлгөн ресурс (Location).
202 Кабыл алынган - асинхрондук кезек (бер 'status _ url').
207 Multi-Status - жарым-жартылай ийгилик (мүмкүн болсо, алыс).

4xx (кардар ката)

400 Bad Request - синтаксис/формат, бирок талааларды валидациялоо эмес (жакшыраак 422).
401 Unauthorized - жок/туура эмес токен. Келгиле, 'WWW-Authenticate'.
403 Forbidden - токен validen, бирок укуктары жетишсиз (RBAC/ABAC/лимиттер).
404 Not Found - ресурс/пункту жок.
409 Conflict - версиялардын/абалдын карама-каршылыгы (optimistic locking, idempotency).
410 Gone - EndPoint түбөлүккө алынып салынат.
412 Precondition Failed - ETag/If-Match өткөн жок.
415 Unsupported Media Type - туура эмес 'Content-Type'.
422 Unprocessable Entity - бизнес эрежелеринин валидациясы.
429 Too Many Requests - ашпаган квота/ылдамдык (караңыз § 7).

5xx (сервер катасы)

500 Internal Server Error - күтүлбөгөн ката; майда-чүйдөсүнө чейин ачыкка чыгарбоо керек.
502 Bad Gateway - апстрим ката.
503 Service Unavailable - деградация/ашыкча жүктөө, бериңиз 'Retry-After'.
504 Gateway Timeout - арткы таймаут.

💡 Босого: 4xx retraim эмес, 5xx retraid болот (backoff/jitter менен), 429 - retrai кийин 'Retry-After'.

5) Домендик таксономия 'error _ code'

Сунуш диапазондору:
  • 'AUTH _' - аутентификация/авторизация.
  • 'VAL _' - кириш маалыматтарды валидациялоо.
  • 'RATELIMIT _' - квота жана ылдамдык.
  • 'IDEMP _' - демпотенттүүлүк/дубликаттар.
  • 'CONFLICT _' - версиялары/абалы.
  • 'DEP _' - көз карандылык (PSP/DNS/SMTP).
  • 'PAY _' - төлөм доменинин бизнес каталары.
  • 'SEC _' - коопсуздук (кол тамгалар, HMAC, mTLS).
  • 'INT _' - ички капыстан.
Талаптар:
  • Убакыттын туруктуулугу (back-compat).
  • Каталар каталогундагы сүрөттөмөлөр жана мисалдар (docs + machine-readable JSON).

6) Retriable vs Non-retriable

Талаалар:
  • `retriable: true|false`
  • Эгерде 'true' - сөзсүз 'Retry-After' (секунд менен) же келишим "экспоненциалдык бэк-офф (1-2 с баштап, макс 30-60 с)".

Retriable адатта: '502/503/504', кээ бир '500', '429' (терезеден кийин).
Non-retriable: `400/401/403/404/409/410/415/422`.

7) Rate Limit & Quota ката (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
}
Аталыштары:
  • `Retry-After: 12`
  • `X-RateLimit-Limit`, `X-RateLimit-Remaining`, `X-RateLimit-Reset`
  • Для квот: `X-Quota-Limit`, `X-Quota-Remaining`, `X-Quota-Reset`

8) Идемпотенттик жана чыр-чатактар

жазуу үчүн суроо-жылы - "Idempotency-Key" (24-72 саат ичинде уникалдуу).
Кайра иштетүү чыр-чатак → 409 Conflict менен 'error _ code: "IDEMP_REPLAY"'.
ETag → 412 Precondition Failed боюнча ресурстун версияларынын чыр-чатагы.
Жооп катары коопсуз кайталап суроо үчүн '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 бизнес-валидация үчүн артыкчылык.
  • Билдирүүлөр - адам окулуучу; 'code' - машина.

10) ката коопсуздук

Эч качан: stack жолдору, SQL, файлдардын жолдору, жеке менчик хост аттары.
PII түзөтүү; GDPR/DSAR мониторинг жүргүзүү.
Кол коюу үчүн/НМАС: "SEC _ SIGNATURE _ MISMATCH" (403) жана "SEC _ TIMESTAMP _ SKEW" (401/403) "текшерүү убактысы ± 5 мин".

11) Корреляция жана байкоо

Ар дайым 'trace _ id '/' X-Request-ID' кошуп, логинге/жолдорго ыргытыңыз.
Каталар 'error _ code' жана 'status' → dashboard 'top-каталар', 'new vs known'.
Alerty: 5xx/422/429, жашыруун p95, share of errors.

12) gRPC/GraphQL/Webhooks - Mappings

gRPC ↔ HTTP

gRPCМаанисиHTTP
`OK`ийгилик200
`INVALID_ARGUMENT`Валидация422/400
`UNAUTHENTICATED`эч кандай токен401
`PERMISSION_DENIED`укугу жок403
`NOT_FOUND`ресурс жок404
`ALREADY_EXISTS`чыр409
`FAILED_PRECONDITION`ETag/алдын ала шарттары412
`RESOURCE_EXHAUSTED`квота429
`UNAVAILABLE`жеткиликсиз503
`DEADLINE_EXCEEDED`Таймаут504
`INTERNAL`ички500

GraphQL

Транспорт 200, бирок 'errors []' ичинде - 'extensions кошуу. code` и `trace_id`.
"Фатал" үчүн (аутентификация/квота) - жакшы чыныгы HTTP 401/403/429.

Webhooks

2xx алуучуну гана ийгиликтүү деп эсептеңиз.
Экспоненциалдык бэк-офф менен ретрайлер, 'X-Webhook-ID', 'X-Signature'.
410 алуучудан - ретрацияны токтотуу (endpoint алынып салынган).

13) Каталарды чыгаруу

'type '/' error _ code' - туруктуу; жаңы - гана кошуу.
дене схемасы өзгөргөндө - API же 'problem + json чакан нускасын жогорулатуу; v=2`.
Документация: коддор таблицасы + мисалдар; changelog каталар.

14) Документтер (OpenAPI үзүндүлөр)

Глобалдык жооптор

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) тестирлөө жана сапаты

Келишим-тесттер: шайкештик 'application/problem + json', милдеттүү талаалар.
Терс тесттер: бардык бутактары 401/403/404/ 409/422/429/500.
Chaos/latency: 5xx/ 503/504/429 ('Retry-After') боюнча retrains текшерүү.
Коопсуздук тесттер: ички билдирүүлөр жок, туура PII маска.
Backward-compat: эски кардарлар жаңы талааларды түшүнүшөт (кошуу, сындырбоо).

16) Киргизүү чек-тизмеси

  • Бирдиктүү 'problem + json' + туруктуу 'error _ code'.
  • Туура семантика HTTP/gRPC/GraphQL.
  • Retriable/non-retriable + 'Retry-After '/back-off сунуштар.
  • Rate-limit аталыштары жана 429 жүрүм-туруму.
  • Idempotency ('Idempotency-Key', 409/412).
  • Коопсуздук: stack traces/сырлары жок, PII редакциясы.
  • 'trace _ id '/' X-Request-ID' бардык каталарда.
  • Каталар каталогунун документтери жана мисалдар.
  • Каталардын таксономиясы боюнча мониторинг.
  • Автотесттер терс сценарийлер.

17) Mini-FAQ

400 422 эмнеси менен айырмаланат?
400 - сынган суроо (синтаксис/мазмундун түрү). 422 - синтаксис боюнча валиддик, бирок бизнес эрежелери өткөн жок.

Качан 401, качан 403?
401 - жок/туура эмес токен; 403 - токен бар, укуктар жетишсиз.

Ар дайым 'Retry-After' керек?
429/503 үчүн - ооба; башка retriable үчүн - ачык сунуш берүү максатка ылайыктуу.

Жыйынтык

Жакшы долбоорлонгон каталар - бул келишим: туура HTTP статусу, бирдиктүү 'problem + json', туруктуу 'error _ code', ретрага боюнча ачык-айкын кеңештер жана катуу коопсуздук. Форматты стандартташтыруу, таксономияны документтештирүү, телеметрия жана тесттерди кошуу - жана сиздин API интеграторлорго болжолдуу, коопсуз жана достук болот.

Contact

Биз менен байланышыңыз

Кандай гана суроо же колдоо керек болбосун — бизге кайрылыңыз.Биз дайым жардам берүүгө даярбыз!

Telegram
@Gamble_GC
Интеграцияны баштоо

Email — милдеттүү. Telegram же WhatsApp — каалооңузга жараша.

Атыңыз милдеттүү эмес
Email милдеттүү эмес
Тема милдеттүү эмес
Билдирүү милдеттүү эмес
Telegram милдеттүү эмес
@
Эгер Telegram көрсөтсөңүз — Emailден тышкары ошол жактан да жооп беребиз.
WhatsApp милдеттүү эмес
Формат: өлкөнүн коду жана номер (мисалы, +996XXXXXXXXX).

Түшүрүү баскычын басуу менен сиз маалыматтарыңыздын иштетилишине макул болосуз.