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

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

كل استجابة غير 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 · المصادقة