نتائج الطلبات
يتم تصنيف كل request إلى API الخاص بـ FourA ضمن نتيجة واحدة بالضبط. يتم حساب النتيجة مرة واحدة في وقت الـ request وتسجيلها مقابل API key الخاص بك. تقرأ لوحة التحكم (dashboard) وموجز النشاط (activity feed) والفوترة الحقل نفسه.
الـ success فقط هو القابل للفوترة.
النتائج السبع
| Outcome | Layer | المعنى |
|---|---|---|
success |
لا ينطبق | تم تسليم response صالح. يُحتسب ضمن حصتك القابلة للفوترة. |
application_error |
target | أرجع الـ target رمز HTTP 200، ولكن الـ body احتوى على حقل خطأ. |
application_fail |
target | أرجع الـ target رمزًا غير 2xx لم تقبله قواعد validate الخاصة بك، أو لم يرجع أي response على الإطلاق. |
client_error |
caller | تم رفض الـ request الخاص بك قبل مغادرته FourA. معلمات خاطئة، أو قيمة proxy غير صالحة، أو URL محمي ضد SSRF. |
rate_limit |
FourA | تم تجاوز حد الـ RPM أو الحد الأقصى للعمليات المتزامنة (concurrency cap). |
service_error |
FourA | أرجعت الخلفية (backend) رمز 5xx، أو لم يكن الـ body الخاص بها بتنسيق JSON صالح. |
service_fail |
FourA | فشل في الشبكة: انتهاء المهلة (timeout)، رفض الاتصال، خطأ DNS، انقطاع اتصال العميل. |
يوضح لك عمود الطبقة (layer) الجهة المسؤولة:
- نتائج target تتعلق بالموقع الذي طلبته. وصل الـ request الخاص بك إلى FourA بنجاح، ووصلت FourA إلى الـ target بنجاح. لكن الـ target نفسه أرجع خطأً.
- نتائج caller تعني أن الـ request الخاص بك لم تكن لديه فرصة للبدء من الأساس. يرجى تصحيح بنية الـ request.
- نتائج FourA تقع على عاتقنا. أعد المحاولة، وتحقق من صفحة الحالة إذا استمرت المشكلة.
إرجاع موقع الـ target لرمز 403 يعتبر application_fail وليس client_error. لقد كان اتصالك سليم البنية، لكن الموقع رفض الطلب فحسب.
الـ Success يتأثر بـ validate
بدون validate، يحدد الـ API الـ request كـ success فقط عندما يرجع الـ target رمز HTTP 200.
مع validate، يتبع النجاح القواعد التي حددتها. إذا أخبرت الـ API أن كلا الرمزين 200 و 403 مقبولان لـ request معين، فستعود استجابة 403 كـ success. وسيظل الـ body يصلك دون تغيير.
curl -X POST https://eu.api.foura.ai/api/single/ \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"method": "GET",
"url": "https://target.example/feed",
"validate": {
"status": { "accept": [200, 403] }
}
}'
في هذا الاتصال، تُحتسب استجابة 403 كـ success وتتم فوترتها كـ request واحد. بينما تُحتسب استجابة 500 كـ application_fail ولا تتم فوترتها.
ينطبق المنطق نفسه على validate.headers و validate.data. أي response يقبله المحرك بناءً على قواعدك يعود كـ success بغض النظر عن حالة HTTP.
تأثيرات الفوترة
| Outcome | قابل للفوترة | يُحتسب ضمن الحصة |
|---|---|---|
success |
نعم | نعم |
application_error |
لا | لا |
application_fail |
لا | لا |
client_error |
لا | لا |
rate_limit |
لا | لا |
service_error |
لا | لا |
service_fail |
لا | لا |
تتم فوترة الـ requests التي قامت بتسليم البيانات التي طلبتها فقط. أما حالات الفشل من جانب FourA، أو جانب الـ target، أو من جانبك أنت، فكلها مجانية.
قراءة النتائج في لوحة التحكم (Dashboard)
يظهر كل request يقوم به الـ API key الخاص بك في موجز النشاط (Activity) مع تسمية النتيجة الخاصة به. وتجمع صفحتا المقاييس (Metrics) ونظرة عامة (Overview) الحقل نفسه للمخططات الدائرية والمخططات الزمنية.
عند تصفية النشاط (Activity) حسب النتيجة، يمكنك أيضًا التركيز على منتج واحد (Single أو Proxy أو Browser) لمعرفة ما إذا كانت فئة معينة من الفشل تقتصر على endpoint واحد.
قواعد إعادة المحاولة
| Outcome | هل إعادة المحاولة آمنة؟ | متى |
|---|---|---|
success |
لا ينطبق | لديك الـ response بالفعل. |
application_error |
أحيانًا | اقرأ الـ error body الخاص بالـ target. بعضها مؤقت، ومعظمها ليس كذلك. |
application_fail |
أحيانًا | إذا كان الـ target يفرض عليك حدًا لمعدل الطلبات (rate-limiting)، فقم بإبطاء الطلبات. وإذا كان يحظرك، فقم بالتحويل إلى الـ endpoint الخاص بـ Proxy أو Browser. |
client_error |
لا | سيفشل الـ request مرة أخرى بالطريقة نفسها. قم بتصحيح المدخلات. |
rate_limit |
نعم | التزم بـ retryAfter الوارد في الـ response body. |
service_error |
نعم | تراجع أسي قصير (exponential backoff). |
service_fail |
نعم | نفس الإجراء لـ service_error. |
موضوعات ذات صلة
- أخطاء API: استجابات الخطأ على مستوى HTTP
- حدود معدل الطلبات (Rate Limits): ما الذي يتسبب في إطلاق
rate_limit - المقاييس (Metrics): أين يمكنك رؤية تفاصيل النتائج
- سجل النشاط (Activity Log): سجل النتائج لكل request