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

رموز حالة HTTP وصيغة استجابات الأخطاء وكيفية التعامل معها في TCG Price Lookup API.


صيغة استجابة الخطأ

جميع الأخطاء تُرجع بصيغة JSON متسقة:

{
  "error": {
    "code": "error_code",
    "message": "وصف خطأ مقروء للإنسان",
    "details": {}
  }
}

رموز حالة HTTP

الرمزالوصف
200نجاح
400طلب غير صحيح (معاملات غير صالحة)
401غير مصادق (مفتاح API غير صالح أو مفقود)
403محظور (قيود خطة الوصول)
404غير موجود (البطاقة أو المورد غير موجود)
429طلبات كثيرة جداً (تجاوز حد المعدل)
500خطأ في الخادم

الأخطاء الشائعة وكيفية التعامل معها

401 Unauthorized

{ "error": { "code": "unauthorized", "message": "Invalid or missing API key" } }

الحل: تحقق من مفتاح API. تأكد من ضبط رأس X-API-Key بشكل صحيح.

429 Too Many Requests

{ "error": { "code": "rate_limit_exceeded", "message": "Daily limit reached" } }

تتضمن الاستجابة رأس Retry-After يشير إلى عدد الثواني حتى الطلب التالي:

Retry-After: 3600
X-RateLimit-Limit: 200
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1704067200

الحل: احترم رأس Retry-After. تُعاد تهيئة الحدود اليومية عند منتصف الليل UTC. رقّ خطتك إذا كنت بحاجة إلى مزيد من الطلبات.

403 Forbidden

{ "error": { "code": "feature_not_available", "message": "Price history requires Trader plan" } }

الحل: بعض الميزات كسجل الأسعار والأسعار المصنفة والبحث المجمّع تتطلب خططاً أعلى.

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

// JavaScript
try {
  const card = await tcg.cards.get('pokemon-base1-4');
} catch (error) {
  if (error.status === 429) {
    // حد المعدل: تحقق من وقت إعادة المحاولة
    const retryAfter = error.headers['retry-after'];
    console.log(`حد المعدل. أعد المحاولة بعد ${retryAfter} ثانية`);
  } else if (error.status === 401) {
    console.error('مفتاح API غير صالح');
  }
}
# Python
from tcglookup import TCGLookup, RateLimitError, AuthError

try:
    results = tcg.cards.search(name="charizard", game="pokemon")
except RateLimitError as e:
    print(f"حد المعدل. أعد المحاولة بعد {e.retry_after} ثانية")
except AuthError:
    print("مفتاح API غير صالح")