الأخطاء والحدود
فهم أخطاء API ورموز الحالة وحدود الموارد حسب الباقة.
فهم أخطاء API و rate limits وقيود الباقات.
تنسيق استجابة الخطأ
تتبع جميع الأخطاء تنسيقاً موحداً:
{
"statusCode": 400,
"statusMessage": "Name is required",
"message": "Name is required",
"url": "/api/v1/minds",
"error": true
}
| Field | Description |
|---|---|
statusCode | رمز حالة HTTP |
statusMessage | وصف الخطأ بصيغة مقروءة (يُضبط لكل خطأ من قبل المعالج — لأخطاء التحقق يكون هذا المشكلة المحددة، مثلاً "Mind not found" أو "Invalid Mind 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 /minds, POST /minds/{id}/knowledge) |
| 202 | Accepted | تم قبول الطلب للمعالجة غير المتزامنة (مثلاً POST /minds/{id}/knowledge مع keywords) |
| 204 | No Content | نجح الطلب بدون جسم استجابة (مثلاً DELETE /minds/{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 خاطئة |
| 422 | Unprocessable Entity | الطلب سليم البنية لكن لا يمكن تنفيذه، مثل بدء التحقق من جمهور لديه أقل من 10 Minds جاهزة (AUDIENCE_TOO_SMALL) |
| 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": "Starter plan limit reached",
"message": "Starter plan limit reached",
"url": "/api/v1/minds",
"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": "Mind 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.
حدود الباقات
راجع جدول حدود الباقات المُنشأ للاطلاع على القيم العامة الحالية. قد تختلف التجاوزات التعاقدية، لذلك تكون data.limit وdata.current في خطأ مصادق عليه هي القيم المعتمدة لذلك الطلب. تظهر باقة Individual باسم "premium" في حمولات API.
مثال على حد Minds
خطأ عند بلوغ الحد:
{
"statusCode": 403,
"statusMessage": "Starter plan limit reached",
"message": "Starter plan limit reached",
"url": "/api/v1/minds",
"error": true,
"data": {
"code": "PLAN_LIMIT",
"limitType": "sparks",
"currentPlan": "premium",
"limit": 100,
"current": 100
}
}
حدود رفع المعرفة
- حجم الملف: حد أقصى 50MB لكل ملف (لجميع الباقات)
- التخزين: لا توجد حدود تخزين صريحة مفروضة حالياً
حدود مفاتيح API
- الحد الأقصى للمفاتيح: لا يُفرض حاليًا أي حد أقصى.
إخفاقات التحقق من الجمهور
يؤدي بدء التحقق من الجمهور لجمهور لديه أقل من 10 Minds جاهزة إلى إرجاع 422 مع الرمز AUDIENCE_TOO_SMALL. أما الجمهور الأكبر مما تسمح به خطتك في الدراسة الواحدة فيُرفض بخطأ حدود الخطة القياسي الموضح أعلاه.
بعد البدء بنجاح، يعمل التحقق في الخلفية، لذا فإن معظم الإخفاقات ليست أخطاء HTTP. اقرأها بدلاً من ذلك من الحقل failure في دفعة التحقق. قد تنتهي الدفعة بأحد الرموز التالية:
| الرمز | المعنى |
|---|---|
AUDIENCE_TOO_SMALL | لدى الجمهور أقل من 10 Minds جاهزة. يُعاد أيضاً على شكل 422 عند بدء التحقق |
MINDS_NEED_RETRAINING | تحتاج Minds في الجمهور إلى إعادة تدريب قبل أن تتمكن من الإجابة |
NOT_ENOUGH_QUESTIONS | أقل من 8 أسئلة تناسب الجمهور، لذلك لم يُطرح أي سؤال |
NOT_ENOUGH_RESPONSES | يحتاج التشغيل إلى إجابات اصطناعية أكثر مما تبقى لديك |
NO_FITTING_SURVEY | لا يوجد استطلاع منشور يناسب الجمهور |
NO_USABLE_SURVEY | لا يمكن لأي من الاستطلاعات التحقق من هذا الجمهور |
NO_SCORE | تعذّر منح درجة لأي من الاستطلاعات لهذا الجمهور |
RUNS_REFUSED | تعذّر بدء تشغيل التحقق |
SURVEY_NOT_FOUND | تعذّر العثور على استطلاع محدد |
SURVEY_FILES_UNREADABLE | تعذّرت قراءة ملفات الاستطلاع المرفوعة |
SURVEY_RESULTS_NOT_FOUND | لا تحتوي الملفات المرفوعة على نتائج منشورة للمقارنة بها |
VALIDATION_TOO_LARGE | سيطلب التحقق أكثر من 30,000 إجابة |
أفضل الممارسات
معالجة الأخطاء
عالج الأخطاء دائماً:
async function requestJson(url, apiKey, data) {
const response = await fetch(url, {
method: 'POST',
headers: {
'Authorization': `Bearer ${apiKey}`,
'Content-Type': 'application/json'
},
body: JSON.stringify(data)
});
const text = await response.text();
let result = null;
if (text) {
try {
result = JSON.parse(text);
} catch {
if (response.ok) throw new Error('Expected a JSON response');
}
}
if (!response.ok) {
throw Object.assign(new Error(result?.statusMessage || result?.message || `HTTP ${response.status}`), {
status: response.status,
data: result?.data,
retryAfter: response.headers.get('Retry-After')
});
}
return result;
}
منطق إعادة المحاولة
طبّق إعادات محاولة ذكية:
- أعد محاولة القراءة عند استجابات
429أو5xxالمؤقتة باستخدام تراجع أُسّي محدود، والتزم بقيمةRetry-After. لا تُعد محاولة الكتابة إلا إذا وثّقت نقطة النهاية دعم عدم تكرار الأثر، مع الحفاظ على المفتاح نفسه ومحتوى الطلب نفسه. بعد مهلة ذات نتيجة غير مؤكدة، تحقّق من المورد أو المهمة الحالية قبل الإرسال مجددًا. - استخدم exponential backoff
- اضبط حداً أقصى لعدد المحاولات
- لا تعيد المحاولة عند أخطاء
4xx(باستثناء 429)
المراقبة
تتبّع استخدامك:
- سجّل ترويسات rate limit
- راقب معدلات الأخطاء
- اضبط تنبيهات للأخطاء المتكررة
- تتبّع أوقات الاستجابة
الترقية عند الحاجة
رقّ باقتك إذا كنت:
- تصل إلى rate limits بشكل متكرر
- تحتاج إلى المزيد من الـ minds
- تطلب رفع ملفات أكبر
- ترغب في دعم ذي أولوية
الحصول على المساعدة
تحقق من الحالة
راقب حالة خدمتنا:
- حالة خدمة 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


