إنتقل إلى المحتوى الرئيسي

معالجة الأخطاء

كل استجابة غير 2xx من Itqan CMS API تستخدم نفس الغلاف. ابنِ معالجة الأخطاء مرة واحدة وستغطي كل واجهة استدعاء برمجية.

غلاف الخطأ

{
"error_name": "not_found",
"message": "No asset matches the given query.",
"extra": null
}
الحقلالنوعالوصف
error_nameنصمعرّف آلي ثابت. قم بتحويل معالجة الأخطاء بناءً عليه، ليس على message أو حالة HTTP. لا يحتوي على مسافات.
messageنصوصف قابل للقراءة البشرية. مُحلَّل عبر Accept-Language — آمن للعرض مباشرة للمستخدمين.
extraكائن أو nullتفاصيل منظمة اختيارية. الشكل يختلف حسب نوع الخطأ (انظر الكتالوج أدناه).

كتالوج الأخطاء

HTTPerror_nameالمُشغِّلشكل extra
400validation_errorمعاملات استعلام أو جسم طلب غير صحيحمصفوفة من كائنات الخطأ على مستوى الحقل
400invalid_jsonجسم طلب JSON مشوَّهnull
401authentication_errorبيانات اعتماد مفقودة أو غير صحيحةnull
401token_not_validتوكن JWT منتهي الصلاحية أو مُلغىnull
403permission_deniedمُصادَق عليه لكن غير مُخوَّلnull
404not_foundالمورد غير موجودnull
4xx/5xxhttp_errorمسار خطأ HTTP عامnull
500internal_errorاستثناء خادم غير معالَجnull
متغير(مخصص)خطأ منطق أعمال عبر ItqanErrorخاص بكل نقطة نهاية؛ موثَّق في صفحة المرجع الخاصة بها

شكل extra لـ validation_error

عندما يكون error_name هو validation_error، يحتوي extra على مصفوفة من كائنات الخطأ على مستوى الحقل:

{
"error_name": "validation_error",
"message": "Invalid Input",
"extra": [
{ "loc": ["query", "page"], "msg": "Input should be greater than or equal to 1", "type": "greater_than_equal" }
]
}

معالجة جانب العميل

قم بالتحويل بناءً على error_name. لا تُحوِّل بناءً على message (يتغير مع اللغة) أو على حالة HTTP وحدها (معرّفات أخطاء متعددة تشترك في نفس حالة HTTP).

async function apiFetch(url, options = {}) {
const resp = await fetch(url, options);
if (resp.ok) return resp.json();

const error = await resp.json();

switch (error.error_name) {
case "not_found":
return null;
case "validation_error":
throw new ValidationError(error.message, error.extra);
case "authentication_error":
case "token_not_valid":
redirectToLogin();
return;
case "internal_error":
throw new RetryableError(error.message);
default:
throw new Error(error.message);
}
}

القواعد الأساسية

  • قم بالتحويل بناءً على error_name، ليس على message أو حالة HTTP.
  • اعرض message للمستخدمين — إنه مُحلَّل مسبقاً عبر Accept-Language.
  • تعامل مع error_name غير المعروف كـ internal_error — قد يضيف الـ API أسماء أخطاء جديدة؛ عميلك يجب ألا يتعطل بسببها.
  • أعد المحاولة مع تأخير عند 5xx فقط — أخطاء 4xx هي أخطاء عميل ولن تُحل بإعادة المحاولة.

أخطاء واجهات الاستدعاء المخصصة

بعض واجهات الاستدعاء البرمجية تُثير ItqanError لحالات منطق الأعمال (مثلاً، تعارض أو فشل تحقق من النطاق). تُنتج هذه error_name مخصصاً لتلك الواجهة. توثّق كل صفحة مرجع واجهة الاستدعاء البرمجية أسماء الأخطاء المخصصة التي يمكن أن تُعيدها.


انظر أيضاً: مبادئ التصميم · مرجع الـ API · المصادقة