الأخطاء
اشكال الأخطاء والرموز
كل خطأ يرد في مغلف موحد. الكود القابل للمعالجة هو `error.code` — لا تعتمد على النص.
المغلف
error.json
{
"error": {
"code": "rate_limited",
"message": "You've hit 100 req/s for key sk_live_****. Retry in 1.2s.",
"request_id": "req_01HT4Q3X…"
}
}الـ request_id يطابق ترويسة X-Request-Id. اذكره عند التواصل مع الدعم.
رموز الأخطاء
| HTTP | الرمز | المعنى | الإجراء |
|---|---|---|---|
| 401 | unauthorized | المفتاح مفقود أو غير صالح أو محذوف. | احصل على مفتاح جديد وأعد النشر. |
| 403 | forbidden | المفتاح صالح ولكنه يفتقر إلى النطاق المطلوب. | أنشئ المفتاح من جديد بالنطاقات الصحيحة. |
| 404 | not_found | المصدر غير موجود (أو يعود لعميل آخر). | تحقق من المعرف; التعزل صارم بين العملاء. |
| 422 | validation_error | فشل التحقق من الجسم. `data.errors` يحتوي على تفاصيل. | أصلح الحمولة. لا فائدة من الإعادة بدون تغيير. |
| 429 | rate_limited | حد المعدل لهذا المفتاح استُنفذ. ترويسة Retry-After موجودة. | انتظر `Retry-After` ثانية ثم أعد. |
| 409 | idempotency_conflict | أُعيد استخدام مفتاح idempotency بجسم مختلف. | استخدم مفتاحاً جديداً أو أعد الجسم الأصلي. |
| 500 | internal_error | خطأ غير متوقع من الخادم. مرتبط في السجل عبر `request_id`. | أعد مع تراجع أسي حتى 3 مرات. |
| 503 | service_unavailable | تبعية معطلة (عادة مؤقت). | افحص صفحة الحالة ثم أعد. |
سلوك المكتبات
ترفع المكتبات استثناءً مخصصاً لكل نوع خطأ — تقيّد عبر instanceof.
handle.py
from via import VIA, RateLimitError, AuthenticationError, NotFoundError
try:
via.orders.get("ord_abc")
except RateLimitError as exc:
time.sleep(exc.retry_after or 1)
except AuthenticationError:
rotate_api_key()
except NotFoundError:
return None