GH GambleHub

API შეცდომები და საუკეთესო პრეტენზიები

1) რატომ არის შეცდომების სტანდარტიზება?

პროგნოზირება მომხმარებლებისთვის: ერთჯერადი ფორმა და ქცევა.
Debage აჩქარება: 'trace _ id '/' request _ id', სტაბილური 'error _ code'.
უსაფრთხოება: SQL/stack traces/კონფისკაცია არ გაჟღენთილია.
დაკვირვება: შეცდომების ტაქსონომიის შესახებ მოხსენებები (შესაბამისობა, კვოტები, ტაიმაუტები და ა.შ.).

2) ძირითადი პრინციპები

1. პასუხის ერთი ფორმატი 4xx/5xx (და ნაწილობრივი შეცდომებით 2xxx- ისთვის ცალკე სქემაა).
2. მკაფიო HTTP სემანტიკა: სწორი სტატუსი ყველაზე მნიშვნელოვანია.
3. კოდის ორი დონე: სატრანსპორტო ('status') და აფეთქების ღუმელის სტაბილური 'error _ code'.
4. Retriable vs Non-retriable: მიუთითეთ მკაფიოდ და მოდით გამოვიყენოთ მხარდაჭერა.
5. ნაგულისხმევი უსაფრთხოება: დეტალები - მხოლოდ უფლებების მქონე კლიენტი; შიდა მარშრუტების გარეშე.
6. ლოკალიზაცია: მანქანების კოდი რჩება სტაბილური, ტექსტი თარგმნილია.

3) შეცდომის ერთიანი ფორმატი (RFC 7807- ის საფუძველზე)

რეკომენდებულია JSON (გაფართოებული 'განაცხადი/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"}
}

სავალდებულო: 'ტიპი', '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 - შეიქმნა რესურსი.
202 Accepted - ასინქრონული რიგში (მიეცით 'status _ urn').
207 Multi-Status - ნაწილობრივი წარმატება (თავიდან აიცილეთ, თუ შესაძლებელია).

4xx (კლიენტის შეცდომა)

400 Bad Request არის სინტაქსი/ფორმატი, მაგრამ არა მინდვრების შესაბამისობა (უკეთესია, ვიდრე 422).
401 Unauthorized - არა/არასწორი ნიშანი. მოდით 'WWW-Authenticate'.
403 Forbidden არის ნამდვილი ნიშანი, მაგრამ არ არის საკმარისი უფლებები (RBAC/ABAC/limites).
404 Not Found - რესურსი/endpoint არ არის.
409 Conflict არის ვერსიის/მდგომარეობის კონფლიქტი.
410 Gone - ენდოინტი სამუდამოდ ამოღებულია.
412 Precondition Failed - ETag/If-Match არ გაიარა.
415 Unsupported Media Type - არარეგულარული 'შინაარსის ტიპი'.
422 Unprocessable Entity - ბიზნესის წესების შესაბამისობა.
429 Too Many Requests - კვოტები/სიჩქარე გადააჭარბა (იხ. § 7).

5xx (სერვერის შეცდომა)

500 Internal Server Error - მოულოდნელი შეცდომა; დეტალების გამჟღავნება არ არის.
502 Bad Gateway არის აფსიდის შეცდომა.
503 სერვისი Unavailable - დეგრადაცია/გადატვირთვა, მიეცით 'Retry-After'.
504 Gateway Timeout - ზურგჩანთა.

💡 ბარიერი: 4xx არ არის დახრილი, 5xx- ის გადატვირთვა შესაძლებელია (backoff/jitter- დან), 429 - retry-After- ის შემდეგ.

5) დომენის ტაქსონომია 'error _ code'

გირჩევთ დიაპაზონს:
  • 'AUTH _' - ავთენტიფიკაცია/ავტორიზაცია.
  • 'VAL _' - შეყვანის მონაცემების შესაბამისობა.
  • 'RATELIMIT _' - კვოტები და სიჩქარე.
  • 'IDEMP _' - idempotence/დუბლიკატები.
  • 'CONFLICT _' - ვერსიები/მდგომარეობა.
  • 'DEP _' - დამოკიდებულება (PSP/DNS/SMTP).
  • 'PAY _' - გადახდის დომენის ბიზნეს შეცდომები.
  • 'SEC _' - უსაფრთხოება (ხელმოწერები, HMAC, mTLS).
  • 'INT _' - შიდა მოულოდნელი.
მოთხოვნები:
  • სტაბილურობა დროში (უკან-კომპატი).
  • შეცდომების კატალოგში აღწერილობები და მაგალითები (docs + machine readable JSON).

6) Retriable vs Non-retriable

მინდვრები:
  • `retriable: true|false`
  • თუ „ნამდვილი“ - აუცილებლად 'Retry-After' (წამში) ან კონტრაქტი „ექსპონენციალური სარეზერვო ოფი (1-2 წმ-დან იწყება, მაქს 30-60 ს)“.

Retriable ჩვეულებრივ: '502/503/504', ზოგიერთი '500', '429' (ფანჯრის შემდეგ).
Non-retriable: `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
}
სათაურები:
  • `Retry-After: 12`
  • `X-RateLimit-Limit`, `X-RateLimit-Remaining`, `X-RateLimit-Reset`
  • Для квот: `X-Quota-Limit`, `X-Quota-Remaining`, `X-Quota-Reset`

8) Idempotence და კონფლიქტები

ჩაწერის მოთხოვნით - '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) შეცდომების უსაფრთხოება

არასდროს: შეტევა ტრაქტები, SQL, ფაილების ბილიკები, მასპინძელთა პირადი სახელები.
რედაქტირება PII; მიჰყევით GDPR/DSAR.
ხელმოწერისთვის/NMAS: განასხვავეთ 'SEC _ SIGNATURE _ MISMATCH' (403) და 'SEC _ TIMESTAMP _ SKEW' (401/403) მითითებით: „შეამოწმეთ“ შეამოწმეთ „დრო 5 წუთი“.

11) კორელაცია და დაკვირვება

ყოველთვის დაამატეთ 'trace _ id '/' X-Request-ID "და გადაიტანეთ შეცდომები/ბილიკები.
შეცდომები გააქტიურეთ 'error _ code' და 'status' dashboards „ტოპ შეცდომები“, „ახალი შეცდომები“.
ალერტა: 5xx/422/429 სიჩქარე, ლატენტობა p95, Earrors sharl.

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 მიმღები.
Retrai ექსპონენციალური ზურგჩანთით, 'X-Webhook-ID', 'X-Signature'.
მიმღებიდან 410 - შეჩერება (წაშლილია).

13) შეცდომების ვერსია

'ტიპი '/' error _ coded' - სტაბილური; ახლები - მხოლოდ დამატება.
სხეულის სქემის შეცვლისას - გაზარდეთ 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) ტესტირება და ხარისხი

კონტრაქტის ტესტები: შესაბამისობა 'განაცხადი/problem + json', სავალდებულო ველები.
Negative tests: ყველა ფილიალი 401/403/404/409/422/429/500.
Chaos/latence: Retry შემოწმება 5xx/503/504/429 ('Retry-After').
უსაფრთხოება: შინაგანი შეტყობინებების არარსებობა, PII სწორი ნიღაბი.
Backward compat: ძველი მომხმარებლები ესმით ახალი ველები (დაამატეთ, არ გატეხოთ).

16) განხორციელების შემოწმების სია

  • ერთი 'problem + json' + სტაბილური 'error _ code'.
  • სწორი სემანტიკა HTTP/gRPC/GraphQL.
  • Retriable/non-retriable + 'Retry-After '/სარეზერვო რეკომენდაციები.
  • სათაურები და 429 ქცევა.
  • Idempotence ('Idempotency-Key', 409/412).
  • უსაფრთხოება: გაფიცვის გარეშე/საიდუმლოებები, PII გამოცემა.
  • 'trace _ id '/' X-Request-ID' ყველა შეცდომაში.

შეცდომებისა და მაგალითების კატალოგის დოკუმენტაცია.

  • შეცდომების ტაქსონომიის მონიტორინგი.
  • უარყოფითი სცენარების ავტორები.

17) მინი-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 არასავალდებულო
ფორმატი: ქვეყნის კოდი და ნომერი (მაგალითად, +995XXXXXXXXX).

ღილაკზე დაჭერით თქვენ ეთანხმებით თქვენი მონაცემების დამუშავებას.