الأخطاء والحدود
فهم أخطاء API ورموز الحالة وحدود الموارد حسب الباقة.
فهم أخطاء API و rate limits وقيود الباقات.
تنسيق استجابة الخطأ
تتبع جميع الأخطاء تنسيقاً موحداً:
{
"statusCode": 400,
"statusMessage": "Name is required",
"message": "Name is required",
"url": "/api/v1/sparks",
"error": true
}
| Field | Description |
|---|---|
statusCode | رمز حالة HTTP |
statusMessage | وصف الخطأ بصيغة مقروءة (يُضبط لكل خطأ من قبل المعالج — لأخطاء التحقق يكون هذا المشكلة المحددة، مثلاً "Spark not found" أو "Invalid spark ID format") |
message | نفس محتوى statusMessage لأخطاء v1. محجوز لمحتوى الـ stack/سياق إضافي في استجابات 5xx في بنايات التصحيح. |
url | مسار الطلب (يُضيفه Nuxt H3) |
error | true لاستجابات الخطأ (يُضيفه Nuxt H3) |
اعتمد دائماً على
statusCodeللمعالجة البرمجية وعلىstatusMessage(أوmessage) للسبب المقروء. الحقلانurlوerrorبيانات تعريف مساعدة من الإطار الأساسي.
رموز حالة HTTP
2xx Success
| Code | Status | Description |
|---|---|---|
| 200 | OK | نجح الطلب |
| 201 | Created | تم إنشاء المورد بنجاح (مثلاً POST /sparks, POST /sparks/{id}/knowledge) |
| 202 | Accepted | تم قبول الطلب للمعالجة غير المتزامنة (مثلاً POST /sparks/{id}/knowledge مع keywords) |
| 204 | No Content | نجح الطلب بدون جسم استجابة (مثلاً DELETE /sparks/{id}/knowledge/{itemId}) |
4xx Client Errors
| Code | Status | Description |
|---|---|---|
| 400 | Bad Request | معاملات طلب غير صالحة |
| 401 | Unauthorized | مفتاح API مفقود أو غير صالح |
| 403 | Forbidden | تم رفض الوصول أو تم بلوغ حد الباقة |
| 404 | Not Found | المورد غير موجود |
| 415 | Unsupported Media Type | ترويسة Content-Type خاطئة |
| 429 | Too Many Requests | تم تجاوز rate limit |
5xx Server Errors
| Code | Status | Description |
|---|---|---|
| 500 | Internal Server Error | خطأ من جانب الخادم |
| 503 | Service Unavailable | الخدمة غير متاحة مؤقتاً |
الأخطاء الشائعة
400 Bad Request
حقل مطلوب مفقود:
{
"statusCode": 400,
"statusMessage": "Name is required"
}
إدخال غير صالح:
{
"statusCode": 400,
"statusMessage": "File too large: document.pdf (55.2MB). Maximum size is 50MB."
}
401 Unauthorized
مفتاح API مفقود:
{
"statusCode": 401,
"statusMessage": "Unauthorized"
}
الحل: ضمّن ترويسة Authorization:
-H "Authorization: Bearer minds_your_api_key"
403 Forbidden
تم بلوغ حد الباقة:
{
"statusCode": 403,
"statusMessage": "Individual plan limit reached",
"message": "Individual plan limit reached",
"url": "/api/v1/sparks",
"error": true,
"data": {
"code": "PLAN_LIMIT",
"limitType": "sparks",
"currentPlan": "premium",
"limit": 100,
"current": 100
}
}
تم رفض الوصول:
{
"statusCode": 403,
"statusMessage": "Access denied"
}
404 Not Found
المورد غير موجود:
{
"statusCode": 404,
"statusMessage": "Spark not found"
}
415 Unsupported Media Type
Content-Type خاطئ:
{
"statusCode": 415,
"statusMessage": "Unsupported Content-Type. Use application/json for links or multipart/form-data for files"
}
الحل: استخدم ترويسة Content-Type الصحيحة:
application/jsonلطلبات JSONmultipart/form-dataلرفع الملفات
429 Too Many Requests
تم تجاوز Rate Limit:
{
"statusCode": 429,
"statusMessage": "Too many requests. Please try again later."
}
Rate Limits
يفرض v1 API حداً ثابت النافذة لكل حساب مصادق عليه. الحد الافتراضي للنشر هو 300 طلب في الدقيقة، لكنه قابل للضبط. اقرأ دائماً RateLimit-Limit وRateLimit-Remaining، وعند 429 انتظر عدد الثواني في Retry-After.
حدود الباقات
الباقات المختلفة لها حدود موارد مختلفة.
حدود الـ Minds
| Plan | Maximum Minds |
|---|---|
| Free | غير محدود |
| Premium | 100 |
| Team | غير محدود |
خطأ عند بلوغ الحد:
{
"statusCode": 403,
"statusMessage": "Individual plan limit reached",
"message": "Individual plan limit reached",
"url": "/api/v1/sparks",
"error": true,
"data": {
"code": "PLAN_LIMIT",
"limitType": "sparks",
"currentPlan": "premium",
"limit": 100,
"current": 100
}
}
حدود رفع المعرفة
- حجم الملف: حد أقصى 50MB لكل ملف (لجميع الباقات)
- التخزين: لا توجد حدود تخزين صريحة مفروضة حالياً
حدود مفاتيح API
- الحد الأقصى للمفاتيح: لا يُفرض حاليًا أي حد أقصى.
أفضل الممارسات
معالجة الأخطاء
عالج الأخطاء دائماً:
try {
const response = await fetch(url, {
method: 'POST',
headers: {
'Authorization': `Bearer ${apiKey}`,
'Content-Type': 'application/json'
},
body: JSON.stringify(data)
});
if (!response.ok) {
const error = await response.json();
console.error(`Error ${error.statusCode}: ${error.message}`);
// Handle specific errors
if (error.statusCode === 429) {
// Implement retry logic
}
}
const result = await response.json();
return result;
} catch (error) {
console.error('Network error:', error);
}
منطق إعادة المحاولة
طبّق إعادات محاولة ذكية:
- أعد المحاولة عند
429(rate limit) وأخطاء5xx - استخدم exponential backoff
- اضبط حداً أقصى لعدد المحاولات
- لا تعيد المحاولة عند أخطاء
4xx(باستثناء 429)
المراقبة
تتبّع استخدامك:
- سجّل ترويسات rate limit
- راقب معدلات الأخطاء
- اضبط تنبيهات للأخطاء المتكررة
- تتبّع أوقات الاستجابة
الترقية عند الحاجة
رقّ باقتك إذا كنت:
- تصل إلى rate limits بشكل متكرر
- تحتاج إلى المزيد من الـ minds
- تطلب رفع ملفات أكبر
- ترغب في دعم ذي أولوية
الحصول على المساعدة
تحقق من الحالة
راقب حالة خدمتنا:
- صفحة الحالة (قريباً)
- تابع @mindsai_co للتحديثات
تواصل مع الدعم
إذا واجهت:
- أخطاء 500 مستمرة
- rate limiting غير صحيح
- سلوك غير متوقع
تواصل معنا:
- نموذج الملاحظات
- Email: [email protected]
راجع الوثائق
مرجع رموز الحالة
مرجع سريع لجميع رموز حالة HTTP:
2xx Success
├─ 200 OK
└─ 201 Created
4xx Client Error
├─ 400 Bad Request
├─ 401 Unauthorized
├─ 403 Forbidden
├─ 404 Not Found
├─ 415 Unsupported Media Type
└─ 429 Too Many Requests
5xx Server Error
├─ 500 Internal Server Error
└─ 503 Service Unavailable