GH GambleHub

קודי שגיאה של API והמנהגים הטובים ביותר

1) מדוע לעשות טעויות סטנדרטיות

חיזוי ללקוחות: תבנית אחת והתנהגות של רטראס.
תאוצת Debug: ”trace _ id'/” request' _ id', יציבה” שגיאה _ קוד ”.
אבטחה: SQL/מחסנית עקבות/תצורה לא ידלוף.
תצפית: דיווח על טקסונומיה שגויה (אימות, מכסות, פסקי זמן וכו ').

2) עקרונות בסיסיים

1. פורמט תגובה יחיד לכל 4xx/5xx (ועבור 2xx עם שגיאות חלקיות - סכימה נפרדת).
2. ברור סמנטיקה HTTP: המצב הנכון הוא החשוב ביותר.
3. שתי רמות של קוד: transport (”מצב”) ודומיין יציב ”שגיאה _ קוד”.
4. Retriable vs. Non-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"}
}

נדרש: "סוג", "שם", "סטטוס", "שגיאה _ קוד", "trace _ id'.
אופציונלי: ”שגיאות [ ]” (על ידי שדות), ”לאחזר”, ”רמז”, ”מטה”.

כותרות בתגובה:
  • תוכן-סוג: יישום/בעיה + ג 'סון &pos
  • ”X-בקשה-זיהוי ”/” Traceparent” (W3C)
  • (429/503) ”Retry-After” (שניות או תאריך)

4) סמנטיקה של סטטוסים של HTTP (מיזוג ”קלאסיקות” ופרקטיקה)

2xx (הצלחה בניואנסים)

200 אישור הוא הצלחה נפוצה.
201 נוצר - מיקום.
202 מתקבל - אסינכרוני בתור (תן 'סטטוס _ url').
207 Multi-States - הצלחה חלקית (להימנע במידת האפשר).

4xx (טעות הלקוח)

400 בקשה גרועה - תחביר/פורמט, אבל לא אימות שדה (רצוי 422).

401 לא מורשה - אסימון לא חוקי. בואו 'WWW-אותנטי. &post;

403 אסימון אסור תקף, אבל אין מספיק זכויות (RBAC/ABAC/limits).
404 לא נמצא - אין משאב/נקודת סוף.
409 סכסוך - נעילה אופטימלית, אידמפוטנטיות.
410 נעלם - סוף נקודה הוסרה לצמיתות.
412 תנאי מוקדם נכשל - ETag/IF-Match נכשל.
415 סוג מדיה לא נתמך - ”תוכן-סוג” לא תקף.
422 ישות בלתי ניתנת לעיבוד - אימות של כללים עסקיים.
429 יותר מדי בקשות - מעבר למכסות/מהירות (ראה # 7).

5xx (שגיאת שרת)

שגיאת שרת פנימית 500 - שגיאה פתאומית; לא לחשוף פרטים.
שער רע 502 - שגיאה במעלה הזרם.
503 שירות לא זמין - הידרדרות/עומס יתר, לתת ”Retry-After”.
פסק זמן של שער 504, פסק זמן אחורי.

💡 סף: 4xx הוא לא מחדש, 5xx הוא מחדש (backoff/jitter), 429 הוא מחדש לאחר ”Retry-After”.

5) טקסונומיה דומיין 'שגיאה _ code&pos

אנו ממליצים על הטווחים הבאים:
  • 'AUTH' - אימות/אישור.
  • VAL _ - אימות של נתוני קלט.
  • 'RATELIMIT' - מכסות ומהירות.
  • 'IDEMP _' - אידמפוטנטיות/כפילויות.
  • עימות - גרסאות/סטטוס.
  • 'DEP _' - תלויות (PSP/DNS/SMTP).
  • ”שלם _” - טעויות עסקיות של תחום התשלום.
  • 'SEC _ - אבטחה (חתימות, HMAC, mTLS).
  • 'INT' - פתאומי פנימי.
דרישות:
  • יציבות לאורך זמן (back-compat).
  • תיאורים ודוגמאות בספריית השגיאות (docs + compliable-machine-readiable JSON).

6) Retriable vs. Non-Retribable

שדות:
  • ניתן לטעות: נכון &ft
  • אם ”נכון” - בהכרח ”Retry-After” (בשניות) או חוזה ”back-off מעריכי (החל מ 1-2 s, מקסימום 30-60 s)”.

ניתן לאחזר בדרך כלל: ”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
}
כותרים:
  • 'Retry-After: 12&fost
  • 'X-Extlimit-Limite', 'X-Estlime-Lessons', X-Estlime-Reset&ft
  • Limital: "X-Quota-Limit", "X-Quota-Lemain", "X-Quota-Resepos

8) אידמפוטנטיות וקונפליקטים

בקשות בכתב - 'Idempotency-Key' (ייחודי בתוך 24-72 שעות).
Treaty conflict # 409 conflict with 'error _ code: "IDEMP_REPLAY"'.
קונפליקט גרסת משאב עבור ETag * 412 Prediction נכשל.
בתגובה, צרף את a 'ressource _ 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, שבילי קובץ, שמות מארחים פרטיים.
ערוך את מח "ש; לפקוח עין על GDPR/DSAR.
לחתימה/HMAC, הבחנה בין 'SEC _ חתימה _ MISMATCH' (403) ו- 'SEC _ TIMESTAMP _ SKEW' (401/403) עם הפקודה ”check intime 5 min”.

11) קורלציה ויכולת תצפית

תמיד הוסף "trace _ id'/" X-Request-ID" וגלול דרך הרישומים/רצועות.
שגיאות צבירה על ידי 'טרור _ קוד' ו 'סטטוס' * לוחות מחוונים ”טעויות עליונות”, ”נגד חדש ידוע”.
התראות: 5xx/422/429 ספייק, p95 latency, שיתוף שגיאות.

12) gRPC/GraphQL/Webhooks - מפיות

GRPC ↔ HTTP

GRPCערךHTTP
'OKAPOS'הצלחה200
"INSALID _ VERSENTAPOSאימות422/400
"לא מפתה &POPSאין אסימון401
רשות _ DENIEDID &POSאין זכויות403
"לא _ FOUNDAPOSSאין משאב404
"כבר _ EXYSTS&POSקונפליקט409
"נכשל _ PRECONDITION &POSתנאים מקדימים של ETag412
משאב _ מותש &POSמכסות429
UNAVAILABLE&PSאינו זמין503
"דדליין _ חורג &POSפסק זמן504
"INTERNAL&PSפנימי500

GraphQL

תחבורה 200, אבל ”טעויות [ ]” בפנים - להוסיף 'חריצות. קוד "trace _ id'.
עבור ”קטלני” (אימות/מכסות) - 401/403/429 HTTP אמיתי הוא טוב יותר.

Webhooks

קחו בחשבון רק מקבלי 2xx מוצלחים.
רטריי עם גיבוי מעריכי, ”X-Webhook-ID”, ”X-חתימה”.
410 מהמקבל - עצור מגש מחדש (סוף נקודה הוסרה).

13) שגיאה במהלכה

”type ”/” טעות _ קוד” - יציב; חדש - רק להוסיף.
בעת שינוי סכימת הגוף, להעלות את הגרסה המינורית של API או 'בעיה + json; v = 2 '.
תיעוד: טבלת קוד + דוגמאות; שגיאות צ 'אנג' לוג.

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.
כאוס/איחור: בדיקה מחדש עבור 5xx/ 503/504/429 (”Retry-After”).
בדיקות אבטחה: אין הודעות פנימיות, נכון מסכת מח "ש.
לקוחות ישנים מבינים שדות חדשים (הוסף, אל תישבר).

16) רשימת מימושים

[ ] בעיה אחת + json '+ יציבה' שגיאה _ קוד '.
[ ] נכון HTTP/gRPC/GRPQL.
[ ] רטריאביליות/לא ניתנות לאחזור + ”Retry-After ”/Back-off המלצות.
[ ] הגבלת קצב כותרות והתנהגות 429.
[ ] אידמפוטנטיות (Idempotency-Key, 409/412).
[ ] אבטחה: אין עקבות/סודות, מהדורת מח "ש.
[ ] 'trace _ id'/' X-Request-ID' בכל הטעויות.
[ ] שגיאות קטלוג תיעוד ודוגמאות.
[ ] ניטור באמצעות טקסונומיה שגויה.
[ ] תרחישים שליליים.

17) מיני ־ FAQ

במה שונה 400 מ-422?
400 - בקשה שבורה (סוג תחביר/תוכן). 422 - תקף בתחביר, אבל כללי עסקים לא עברו.

מתי 401 ומתי 403?
401 - אסימון לא נכון; 403 - יש אסימון, אין מספיק זכויות.

האם "Retry-After 'Always צורך?
עבור 429/503, כן; עבור השאר, ניתן לאחזר - מומלץ לתת המלצה מפורשת.

סך הכל

באגים מעוצבים היטב הם החוזה: נכון מצב HTTP, יחיד ”בעיה + json”, יציב ”שגיאה _ קוד”, רמזים מגשים מחדש מפורשים, וביטחון חזק. תקן את הפורמט, תיעד את הטקסונומיה, תוסיף טלמטריה ומבחנים, והמכשיר שלך יהיה צפוי, מאובטח וידידותי לאינטגרטור.

Contact

צרו קשר

פנו אלינו בכל שאלה או צורך בתמיכה.אנחנו תמיד כאן כדי לעזור.

Telegram
@Gamble_GC
התחלת אינטגרציה

Email הוא חובה. Telegram או WhatsApp — אופציונליים.

השם שלכם לא חובה
Email לא חובה
נושא לא חובה
הודעה לא חובה
Telegram לא חובה
@
אם תציינו Telegram — נענה גם שם, בנוסף ל-Email.
WhatsApp לא חובה
פורמט: קידומת מדינה ומספר (לדוגמה, +972XXXXXXXXX).

בלחיצה על הכפתור אתם מסכימים לעיבוד הנתונים שלכם.