معالجة الأخطاء
رموز حالة 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 غير صالح")