GH GambleHub

رموز خطأ واجهة برمجة التطبيقات وأفضل الممارسات

1) لماذا توحيد الأخطاء

القدرة على التنبؤ للعملاء: تنسيق واحد وسلوك retras.
Debug acceleration: 'trace _ id '/' request _ id', stable 'error _ code'.
الأمان: لن تتسرب آثار/تكوينات SQL/stack.
إمكانية الرصد: الإبلاغ عن تصنيف الأخطاء (التحقق من الصحة، والحصص، والمهل الزمنية، وما إلى ذلك).

2) المبادئ الأساسية

1. تنسيق استجابة واحد لجميع 4xx/5xx (و 2xx مع أخطاء جزئية - مخطط منفصل).
2. دلالات HTTP واضحة: الحالة الصحيحة هي الأكثر أهمية.
3. مستويين من الرموز: النقل («الحالة») والنطاق المستقر «الخطأ _ الرمز».
4. قابل للاسترجاع مقابل غير قابل للاسترداد: حدد صراحة وأعطي تلميحًا حول التراجع.
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"}
}

المطلوب: «نوع»، «عنوان»، «حالة»، «خطأ _ رمز»، «تتبع _ معرف».
اختياري: «أخطاء []» (حسب الحقول)، «قابلة للاسترجاع»، «تلميح»، «ميتا».

الرؤوس ردا على ذلك:
  • «نوع المحتوى: التطبيق/المشكلة + json»
  • "X-Request-ID "/" Traceparent' (W3C)
  • (لـ 429/503) «إعادة المحاولة بعد» (ثوانٍ أو تاريخ)

4) دلالات أوضاع HTTP (دمج «الكلاسيكيات» والممارسة)

2xx (نجاح دقيق)

200 موافق نجاح شائع.
201 تم إنشاؤه - الموقع.
202 مقبول - بشكل غير متزامن في قائمة الانتظار (أعط «الحالة _ url»).
207 متعدد الأوضاع - نجاح جزئي (تجنب إن أمكن).

4xx (خطأ العميل)

400 طلب سيء - بناء/تنسيق، ولكن ليس التحقق الميداني (ويفضل 422).
401 غير مصرح به - لا/رمز غير صالح. دعونا «WWW-Authenticate».
403 ممنوع - الرمز المميز صحيح، ولكن لا توجد حقوق كافية (RBAC/ABAC/limits).
404 غير موجود - لا يوجد مورد/نقطة نهاية.
409 الصراع - القفل الأمثل، الغباء.
410 ذهب - تمت إزالة نقطة النهاية بشكل دائم.
412 فشل الشرط المسبق - فشل ETag/If-Match.
415 نوع الوسائط غير المدعومة - غير صالح «نوع المحتوى».
422 الكيان غير القابل للاختفاء - التحقق من قواعد الأعمال.
429 طلبات كثيرة جدا - تجاوزت الحصص/السرعة (انظر الفقرة 7).

5xx (خطأ في الخادم)

500 خطأ في الخادم الداخلي - خطأ مفاجئ ؛ عدم الكشف عن التفاصيل.
502 بوابة سيئة - خطأ المنبع.
503 خدمة غير متوفرة - التدهور/الحمل الزائد، أعط «Retry-After».
504 Gateway Timeout - المهلة الخلفية.

💡 العتبة: 4xx ليست retrayem، 5xx قابلة للاسترداد (backoff/jitter)، 429 بعد «Retry-After».

5) تصنيف المجال «خطأ _ كود»

نوصي بالنطاقات التالية:
  • 'AUTH _' - التوثيق/الإذن.
  • 'VAL _' - التحقق من صحة بيانات المدخلات.
  • «RATELIMIT _» - الحصص والسرعة.
  • 'IDEMP _' - idempotence/duplicates.
  • «الصراع _» - الإصدارات/الحالة.
  • 'DEP _' - التبعيات (PSP/DNS/SMTP).
  • «ادفع _» - أخطاء تجارية في مجال الدفع.
  • «SEC _» - الأمن (التوقيعات، HMAC، mTLS).
  • «INT _» - مفاجئ داخلي.
الاحتياجات:
  • الاستقرار بمرور الوقت (المقارن الخلفي).
  • الوصف والأمثلة في دليل الخطأ (مستندات + مقروءة آليا JSON).

6) قابل للاسترداد مقابل غير قابل للاسترداد

الحقول:
  • "قابل للاسترداد:" أخطاء "حقيقية
  • إذا كان «صحيح» - بالضرورة «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-RateLimit-Limit' و" X-RateLimity-Resett' و "X-RateLimite-Resett'
  • Для квот: «X-Cota-Limit' و» X-Cota-Remain «و» X-Conta-Resett'

8) الفراغ والصراعات

في طلبات الكتابة - «Idempotency-Key» (فريد في غضون 24-72 ساعة).
Retry conflict → 409 Conflict with 'error _ code: "IDEMP_REPLAY"'.
تعارض نسخة الموارد لـ ETag → 412 Precondition Failed.
في الرد، أرفق "المصدر _ المعرف "/" الحالة _ 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 ؛ راقب اللائحة العامة لحماية البيانات/منطقة DSAR.
للتوقيع/HMAC، ميز بين 'SEC _ SIGNATURE _ MISMATCH' (403) و 'SEC _ TIMESTAMP _ SKEW' (401/403) مع «التحقق من الوقت ± 5 دقائق».

11) الارتباط وقابلية الملاحظة

أضف دائمًا «trace _ id »/« X-Request-ID» وقم بالتمرير عبر السجلات/المسارات.
أخطاء مجمعة عن طريق «خطأ _ رمز» و «حالة» → لوحات القيادة «أعلى الأخطاء»، «جديد مقابل معروف».
التنبيهات: 5xx/422/429 ارتفاع، زمن الوصول p95، حصة الأخطاء.

12) gRPC/GraphQL/Webhooks - خرائط

gRPC ↔ HTTP

gRPCقيمةHTTP
«حسنًا»نجاح200
'غير صالح _ ARGUMENT'المصادقة422/400
'غير مصرح به'لا رمز401
«إذن _ نفي»لا حقوق403
'NOT _ FOUND'لا يوجد مورد404
«بالفعل _ وجود»الصراع409
«فاشل _ شرط مسبق»ETag/الشروط المسبقة412
«مورد _ مستنفد»الحصص429
'غير متوفر'غير متوفره503
«الموعد النهائي _ تجاوز»المهلة504
«داخلي»داخلي500

الرسم البياني QL

النقل 200، ولكن "الأخطاء []" في الداخل - أضف "التوترات. الرمز 'и' trace _ id '.
بالنسبة إلى «القاتل» (المصادقة/الحصص) - فإن 401/403/429 HTTP الحقيقي أفضل.

شبكات الويب

ضع في اعتبارك أن المتلقين 2xx فقط ناجحون.
Retrai مع تراجع أسي، «X-Webhook-ID»، «X-Signature».
410 من المتلقي - توقف عن إعادة الدرج (تمت إزالة نقطة النهاية).

13) إصدار خطأ

«نوع »/« خطأ _ رمز» - مستقر ؛ جديد - أضف فقط.
عند تغيير مخطط الجسم، رفع النسخة الثانوية من 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) الاختبار والجودة

عقد الاختبار: «طلب/مشكلة + جسون»، الحقول المطلوبة.
الاختبارات السلبية: جميع الفروع 401/403/404/ 409/422/429/500.
الفوضى/زمن الكمون: التحقق من عمليات إعادة التدوير لـ 5xx/ 503/504/429 («Retry-After»).
الاختبارات الأمنية: لا توجد رسائل داخلية، قناع PII صحيح.
المقارنة الخلفية: العملاء القدامى يفهمون مجالات جديدة (أضف، لا تنكسر).

16) قائمة التنفيذ المرجعية

  • Single 'problem + json' + stable 'error _ code'.
  • تصحيح دلالات HTTP/gRPC/GraphQL.
  • التوصيات القابلة للاسترجاع/غير القابلة للاسترجاع + 'Retry-After '/التراجع.
  • رؤوس حد السعر و 429 سلوكًا.
  • Idempotency («Idempotency-Key»، 409/412).
  • الأمن: لا توجد آثار/أسرار مكدسة، طبعة PII.
  • 'التعقب _ id '/' X-Request-ID' في جميع الأخطاء.
  • وثائق وأمثلة كتالوج الأخطاء.
  • الرصد بتصنيف الخطأ.
  • الاختبارات الذاتية للسيناريوهات السلبية.

17) الأسئلة الشائعة المصغرة

كيف يختلف 400 عن 422 ؟

400 - طلب مكسور (نوع التركيب/المحتوى). 422 - صالحة في الجملة، لكن قواعد العمل لم تمر.

متى 401 ومتى 403 ؟

401 - لا/رمز غير صحيح ؛ 403 - هناك رمز، لا توجد حقوق كافية.

هل هناك حاجة إلى «إعادة التجربة بعد» دائمًا ؟

مقابل 429/503، نعم ؛ بالنسبة للباقي، القابل للاسترجاع - من المستصوب تقديم توصية صريحة.

المجموع

الأخطاء المصممة جيدًا هي العقد: حالة HTTP الصحيحة، و «مشكلة + جسون» فردية، و «خطأ _ رمز» مستقر، وتلميحات إعادة طباعة صريحة، وأمان قوي. قم بتوحيد التنسيق، وتوثيق التصنيف، وإضافة القياس عن بعد والاختبارات - وتصبح واجهة برمجة التطبيقات الخاصة بك قابلة للتنبؤ وآمنة وصديقة للتكامل.

Contact

اتصل بنا

تواصل معنا لأي أسئلة أو دعم.نحن دائمًا جاهزون لمساعدتكم!

Telegram
@Gamble_GC
بدء التكامل

البريد الإلكتروني — إلزامي. تيليغرام أو واتساب — اختياري.

اسمك اختياري
البريد الإلكتروني اختياري
الموضوع اختياري
الرسالة اختياري
Telegram اختياري
@
إذا ذكرت تيليغرام — سنرد عليك هناك أيضًا بالإضافة إلى البريد الإلكتروني.
WhatsApp اختياري
الصيغة: رمز الدولة + الرقم (مثال: +971XXXXXXXXX).

بالنقر على الزر، فإنك توافق على معالجة بياناتك.