حدود معدّل الطلبات
كل طلب يُرسل برمز تثبيت يمرّ على عدّادين في الدقيقة: عدّاد تثبيتك، ثم عدّاد المتجر. وتحتاج عمليات الكتابة أيضًا إلى ترويسة Idempotency-Key حتى لا تُنفَّذ إعادة المحاولة مرتين.
حصة التثبيت
لكل تثبيت لتطبيقك حصته الخاصة: 120 طلبًا في الدقيقة. تُفحص هذه الحصة أولًا، فالتطبيق الذي يدور في حلقة على متجر واحد يبلغ حدّه الخاص قبل أن يستنفد حصة متجر التاجر.
العدّاد نافذة ثابتة تبدأ من الصفر مع بداية كل دقيقة على الساعة. كل طلب يُحسب، بما في ذلك الطلبات الفاشلة. والطلبات المرفوضة بـ 429 تُحسب أيضًا، فإعادة المحاولة في حلقة سريعة لا تقرّب موعد التصفير.
حصة المتجر
بعد حصة التثبيت، يُحسب الطلب من حصة المتجر في الدقيقة. هذه الحصة مشتركة بين كل المفاتيح وكل التطبيقات في المتجر، بما فيها مفاتيح API الخاصة بالتاجر نفسه. تحصل رموز تثبيت التطبيقات على حصة خطة Enterprise، أي 600 طلب في الدقيقة، مهما كانت خطة المتجر، إلا إذا حدّدت DZBuild حدًا آخر لذلك المتجر.
تطبّق البوابة https://api.dzbuild.app أيضًا سقفًا قدره 600 طلب في الدقيقة لكل متجر قبل أن يصل الطلب إلى خوادم DZBuild. ولا تأخذ بالحد الآخر الذي تحدّده DZBuild لمتجر ما، فيبقى ذلك المتجر محدودًا بـ 600 عندها.
لبعض نقاط الوصول المكلفة حصة إضافية لكل متجر فوق هاتين الحصتين:
| نقاط الوصول | الحد لكل متجر |
|---|---|
| رفع صورة منتج | 10 في الدقيقة، و3 في الوقت نفسه |
| الإرسال إلى شركة التوصيل، ربط شركة التوصيل واختبارها ومزامنة أسعارها | 6 في الدقيقة، و2 في الوقت نفسه |
| كتابات أقسام الصفحة الرئيسية | 30 في الدقيقة، و5 في الوقت نفسه |
429 Too Many Requests
عندما تمتلئ حصة، تجيب الواجهة البرمجية بـ 429:
{
"error": {
"code": "rate_limited",
"message": "Per-minute API limit exceeded for this app install",
"retry_after": 23
},
"meta": { "request_id": "8f2c1a9d4b7e6035", "api_version": "v1" }
}
يحمل الرد أيضًا ترويسة Retry-After بنفس عدد الثواني. تبيّن الرسالة أي حصة امتلأت: Per-minute API limit exceeded for this app install لحصتك، وPer-minute API limit exceeded for this store لحصة المتجر. أما رفض البوابة نفسها لسقف المتجر فنصّه Per-minute API limit exceeded for this key. انتظر retry_after ثانية، ثم أعد إرسال الطلب بنفس قيمة Idempotency-Key.
إذا جرت عمليات مكلفة كثيرة في الوقت نفسه، يكون الرد 429 مع رمز الخطأ too_many_concurrent وقيمة retry_after تساوي 5 ثوانٍ.
402 Payment Required
يعني الرد 402 أن الطلب لن يمرّ حتى يدفع التاجر مقابل شيء ما. إعادة المحاولة لا تفيد. اعرض على التاجر ما عليه فعله.
| رمز الخطأ | المعنى |
|---|---|
no_credit | رصيد WhatsApp للمتجر فارغ (راجع واجهة WhatsApp). يشحنه التاجر من لوحة التحكم. |
quota_exceeded | بلغ المتجر حصة شهرية من الطلبات حدّدتها له DZBuild. |
Idempotency-Key
يجب أن تحمل طلبات POST وPATCH وDELETE ترويسة Idempotency-Key. ولا تحتاجها طلبات GET وPUT.
POST /v1/orders HTTP/1.1
Host: api.dzbuild.app
Authorization: Bearer dzpk_live_xxxxxxxx
Idempotency-Key: create-order-7f3a9c21
Content-Type: application/json
القواعد كما تطبّقها الواجهة البرمجية:
- المفتاح 64 حرفًا على الأكثر من بين
A-Zوa-zو0-9و_و-و:و.. المفتاح الغائب أو غير الصالح يُجاب بـ400مع رمز الخطأbad_request. - المفتاح تابع لرمز تثبيت واحد. مفاتيح تثبيتين مختلفين لا تتصادم أبدًا.
- تحفظ
DZBuildالرد مدة 24 ساعة. إرسال المفتاح نفسه بنفس الطريقة والمسار والجسم يُرجع الحالة والجسم المحفوظين دون تنفيذ الطلب من جديد، مع الترويسةIdempotency-Replay: 1. - استعمال المفتاح نفسه بطريقة أو مسار أو جسم مختلف يُجاب بـ
422مع رمز الخطأidempotency_key_reuse. سلسلة الاستعلام لا تدخل في المقارنة. - ردود
4xxتُحفظ أيضًا. إذا فشل طلب بـ4xxوصحّحت الجسم، فأرسله بمفتاح جديد. - ردود
5xxو429لا تُحفظ، فإعادة المحاولة بالمفتاح نفسه تنفّذ الطلب من جديد. - يُحفظ الرد عند انتهاء الطلب الأول. طلبان يُرسلان في اللحظة نفسها بالمفتاح نفسه قد يُنفَّذان كلاهما، فلا ترسل محاولات متوازية.
أنشئ مفتاحًا واحدًا لكل عملية، انطلاقًا من معرّف المهمة لديك مثلًا، وأعد استعماله في كل إعادة محاولة لتلك العملية.