تخطّ إلى المحتوى
🚀 عشر أدوات متاحة الآن، مجانًا إلى الأبد — وصندوق الأدوات يكبر باستمرار
الرئيسية›المدونة›حد معدل الطلبات في الـ API: الدليل الكامل للحدود والدفعات والتمهل
أدلة

حد معدل الطلبات في الـ API: الدليل الكامل للحدود والدفعات والتمهل

تحفظ حدود المعدل قابلية استخدام الـ API حين يتصاعد الطلب. يغطي هذا الدليل الخوارزميات الأربع التي يجدر معرفتها، واختيار حد يمكن الدفاع عنه، والترويسات التي يحتاجها العملاء، وكيف تتمهل على نحو صحيح عند استلام الرمز 429.

✍ بقلم المؤسس والرئيس التنفيذي، فريق BuildToolForge🗓 2026-10-12⏱ 11 دقيقة
apirate-limitingthrottlinghttpbackoff
دليل تصميم الـ API2026

حدود المعدل
كما ينبغي

دلو الرموز، والنوافذ المنزلقة، والترويسات، والتمهل

أمثلة محسوبة · ترويسات جاهزة للنسخ · بدون تسجيل

GET /v1/items · 429
$ GET /v1/items
200RateLimit-Remaining: 42of 1000
200RateLimit-Reset: 1800
429Too Many Requests
hdrRetry-After: 4
✓ انتظار 1 ث · 2 ث · 4 ث · مع تذبذب
المقاييس
المعدل
طلب/ث مستمر
الدفعة
حجم الدلو
النافذة
فترة العد
المفتاح
لكل مستخدم أو IP
429
تجاوز الحد
Retry-After
ترويسة
يحمي الطاقةعادل بين العملاءتكاليف متوقعةيوقف الإساءةالحساب مجاني

تعمل الـ API بلا حد للمعدل عملاً رائعاً حتى اللحظة التي يكتب فيها أحد العملاء حلقة بلا أي توقف. حينئذ يستهلك متصل واحد الطاقة التي يتشاركها الجميع، ويرتفع زمن الاستجابة لكل مستخدم آخر، ويبدو الفشل كانقطاع للخدمة لا كبرنامج نصي واحد سيئ التصرف. وحد المعدل هو الآلية التي تحوِّل هذا المشهد إلى خطأ صغير محصور موسوم بوضوح، ولعميل واحد فقط.

ضبط الحدود على نحو صحيح مسألة وضوح في الأساس: أن تقرر ماذا تعد، وعلى أي فترة، ولمن، وماذا تقول لعميل تجاوز الحد. يغطي هذا الدليل الخوارزميات، واختيار أرقام يمكن الدفاع عنها، والترويسات التي تُبقي عميلاً مكتوباً جيداً داخل حدودك، وكيف تتمهل حين تكون أنت العميل.

لماذا يهم حد المعدل

يُدخَل حد المعدل عادة بعد عُطل، لكنه يحل أربع مشكلات مستقلة في الوقت نفسه:

  • حماية الطاقة. لخدمتك حد أقصى من المعالجة يمكن إدامته. والحد يُبقي الطلب تحته بالتصميم لا بالحظ.
  • الإنصاف. بغير حد لكل عميل، ينال أكثر المتصلين ضجيجاً أكبر قدر من الموارد. وبالحد ينال كل عميل نصيباً متوقعاً.
  • ضبط التكلفة. إذا كان كل طلب يستدعي استعلاماً لقاعدة البيانات أو نداءً لطرف ثالث أو تشغيل نموذج، فإن API بلا حد تعني فاتورة بلا حد.
  • مقاومة الإساءة. حشو بيانات الاعتماد والكشط والتعداد جميعها تعتمد على الحجم. والحد يجعلها أبطأ من أن تكون عملية وأظهر من أن تمر دون تنبيه.

وهناك فائدة خامسة أهدأ: الحد الموثَّق عقد. فيمكن بناء العملاء على احترامه، وهذا أفضل بكثير من أن تكتشف سقفك عند الاصطدام به.

الخوارزميات التي يجدر معرفتها

كل مُحدِّد معدل يجيب على السؤال نفسه: هل هذا الطلب مسموح الآن؟ لكنها تختلف في معاملة الدفعات، وهذا الاختلاف هو ما تحسّه فعلاً كعميل.

الخوارزميةتسمح بالدفعات؟الأفضل لـ
دلو الرموزنعم، حتى حجم الدلوالـ API العامة؛ الخيار الافتراضي المعتاد
الدلو المثقوبلا، المخرَج منتظم تماماًحماية خلفية ذات طاقة ثابتة
النافذة الثابتةنعم، لكن بإجحاف عند الحدودحصص بسيطة لا تهم فيها الدقة
النافذة المنزلقةداخل الحد الحقيقي فقطتطبيق دقيق؛ يكلف حالة أكثر

دلو الرموز

تخيّل دلواً يحمل عدداً ثابتاً من الرموز ويُعاد تعبئته بمعدل ثابت. كل طلب يأخذ رمزاً واحداً. وإذا كان الدلو فارغاً رُفض الطلب. ويصفه رقمان وصفاً كاملاً: معدل التعبئة، وهو معالجتك المستمرة، وحجم الدلو، وهو أكبر دفعة تتحملها.

دلو من 100 رمز يُعاد تعبئته بعشرة في الثانية يسمح لعميل خامل بإطلاق 100 طلب فوراً، ثم يستقر به على عشرة في الثانية. وهذا ما تريده عادة: فالعملاء الحقيقيون يأتون على دفعات، لذا فالارتفاع القصير حركة طبيعية لا إساءة، في حين يبقى المتوسط على المدى الطويل محدوداً. ودلو الرموز هو الافتراضي لأسباب وجيهة: تنفيذه رخيص، ولا يحتاج إلا عدّ رموز وطابعاً زمنياً لكل عميل، وسلوكه سهل الشرح في الوثائق.

الدلو المثقوب

الدلو المثقوب هو الصورة المعاكسة. تدخل الطلبات في طابور وتخرج بمعدل ثابت، كالماء من ثقب. وإذا امتلأ الطابور رُفضت الطلبات الجديدة. المخرَج منتظم تماماً، وهذا بالضبط ما تحتاجه أمام خلفية لا تحتمل أي ارتفاع، كنظام قديم أو API لطرف ثالث تعيد بيعها.

والمقابل هو زمن الاستجابة. فالطلب الذي يصل إلى طابور يكاد يمتلئ ينتظر بدلاً من أن يفشل سريعاً، ولا يستطيع العميل التمييز بين خادم بطيء وطلب في الطابور. استخدمه لتشكيل الحركة الداخلة إلى شيء هش، وفضّل دلو الرموز حين تحمي خدمتك المرنة.

النوافذ الثابتة والمنزلقة

تعد النافذة الثابتة الطلبات لكل فترة تقويمية: 1000 في الساعة، تُصفَّر عند رأس الساعة. تنفيذها بسيط جداً بعدّاد ومفتاح، ولها عيب معروف: دفعة الحدود. فالعميل الذي يرسل 1000 طلب عند 10:59:59 وألفاً آخر عند 11:00:01 بقي داخل السياسة وسلّم 2000 طلب في ثانيتين، أي ضعف الذروة التي قصدتها.

وتُصلح النافذة المنزلقة ذلك بالعد على الفترة السابقة لا على الكتلة التقويمية الحالية. فعند 11:00:01 لا تزال ترى طلبات 10:59:59 وترفض الزائد. النسخة الدقيقة تحفظ طابعاً زمنياً لكل طلب، وهذا يكلف ذاكرة؛ وهناك حل وسط شائع يرجّح عدّ النافذة السابقة بمقدار ما لا يزال متراكباً منها، وهو دقيق بما يكفي لأي API تقريباً بجزء بسيط من الحالة.

كيف تختار حدودك

اختر الأرقام من القياسات لا من رقم مستدير يبدو كريماً. وهذا تسلسل ناجع:

  1. قِس سقفك. اختبر الحمل حتى يتدهور زمن الاستجابة. تلك المعالجة، ناقص هامش، هي طاقتك الحقيقية.
  2. اقسم على العملاء المتزامنين المتوقعين. هذه نقطة بداية لحد لكل عميل، وليست الجواب النهائي.
  3. انظر في حركتك الحالية. اعرف المئين 95 والمئين 99 لمعدل الطلبات لكل عميل. والحد الواقع تحت المئين 99 سيستدعيك بسبب مستخدمين شرعيين.
  4. أضف هامشاً للدفعات. نحو 10 إلى 20 مِثل معدل الثانية حجمٌ شائع للدلو؛ يستوعب تحميلات الصفحات العادية دون أن يسمح بإساءة مستمرة.
  5. اجعلها على مستويات. لا ينبغي للعملاء المجهولين والموثَّقين والمدفوعين أن يتشاركوا حداً واحداً. وتسعير سقف أعلى هو أيضاً أنظف طريقة لتسعير الـ API.
  6. راقب قبل أن تُطبِّق. سجّل أسبوعاً ما كان سيُرفض قبل أن تبدأ برفضه فعلاً.

ما تعتمده مفتاحاً يهم بقدر ما يهم الرقم. فالاعتماد على الـ IP هو الخيار الوحيد للحركة المجهولة لكنه يعاقب الشبكات المشتركة وNAT؛ والاعتماد على مفتاح الـ API عادل وهو الافتراضي الصحيح للنداءات الموثَّقة؛ والاعتماد على الحساب يمنع عميلاً من شراء طاقة إضافية بإنشاء مفاتيح. وكثير من الـ API تطبّق الثلاثة معاً: حد عام، وحد لكل مفتاح، وحد لكل نقطة وصول على المسارات المكلفة.

وبعد أن يكون الرقم بين يديك، يسهل أن يختل الحساب الذي يحوّله إلى فاصل بين الطلبات اختلالاً بسيطاً. وتحوّل حاسبة حد المعدل الحد والنافذة إلى أدنى تأخير بين الطلبات، والمعدل المستمر الآمن، وقيمة Retry-After قابلة للنشر.

الترويسات التي يحتاجها العملاء

الحد الذي لا يراه العميل هو حد سيصطدم به العميل. أرسل حالتك في كل استجابة لا في الرفض وحده:

  • RateLimit-Limit — سقف النافذة الحالية.
  • RateLimit-Remaining — عدد الطلبات المتبقية فيها.
  • RateLimit-Reset — متى يتجدد المخصص، بالثواني من الآن.
  • Retry-After — عند الرمز 429 أو 503، مدة الانتظار. عدد ثوان أو تاريخ HTTP.

وما زالت صيغة X-RateLimit-* واسعة الانتشار وتعمل جيداً؛ والأسماء بلا بادئة أعلاه هي الصيغة المعيارية، وإرسال الاثنتين أثناء الانتقال لا يكلف شيئاً. والمهم أن تكون القيم موجودة ودقيقة، لأنها تتيح لعميل جيد أن ينظّم وتيرته فلا يرى الرمز 429 أبداً.

وعندما ترفض، أعِد 429 Too Many Requests، ولا تعِد 403 ولا 500 عاماً. فالرمز 429 هو الوحيد الذي يخبر العميل بأن الطلب كان سليماً وسينجح لاحقاً، وهو الإشارة الوحيدة التي تنتج إعادة محاولة صحيحة. ويغطي مرجع رموز حالة HTTP الرموز ذات الصلة وما يوجبه كل منها على العميل.

كيف تتعامل مع 429 كعميل

من الجهة الأخرى للاتصال، القواعد قصيرة وغالباً ما تُنفَّذ تنفيذاً ناقصاً:

  1. احترم Retry-After. إذا أخبرك الخادم بمدة الانتظار فانتظرها. ولا شيء آخر تفعله يكون أحسن علماً منها.
  2. وإلا فتمهّل تمهلاً تضاعفياً. انتظر ثانية، ثم ثانيتين، ثم أربعاً، ثم ثماني، حتى سقف. فإعادة المحاولة فوراً تحوّل حملاً زائداً إلى تدافع من صنع يديك.
  3. أضف تبايناً عشوائياً. غيِّر كل مدة انتظار عشوائياً بمئات قليلة من المللي ثانية. فبغير ذلك يعيد كل العملاء الذين فشلوا معاً المحاولة معاً، فتُعيد خطة التمهل إنتاج الذروة التي كان عليها أن توزعها.
  4. حدِّد عدد المحاولات. ثلاث إلى خمس محاولات ثم أعلِن الفشل. فالمحاولات اللانهائية تخفي عُطلاً حقيقياً.
  5. نظّم وتيرتك من الترويسات. اقرأ RateLimit-Remaining وتمهّل قبل أن تُرفض. وهذا هو الفرق بين عميل يعمل وعميل يعمل في معظم الأوقات.
  6. لا تعِد أبداً طلباً من فئة 4xx غير 429. فالرمز 400 أو 422 سيفشل على النحو نفسه كل مرة، لأن المشكلة في الطلب ذاته.

أخطاء شائعة يجب تجنبها

  • إعادة 403 بدل 429. يقرأ العملاء 403 كأنه دائم فيتوقفون، أو يعيدون المحاولة بلا تفكير؛ وكلا السلوكين غير مرغوب.
  • إغفال Retry-After. طلبتَ من العميل أن يخمّن، والتخمين المعتاد هو «فوراً».
  • الاعتماد على الـ IP وحده. يصبح مكتب كامل خلف عنوان NAT واحد عميلاً واحداً، ويصبح كاشط موزَّع ألف عميل.
  • عدّ كل نقاط الوصول بالتساوي. لا ينبغي أن تكلف قراءة من الذاكرة المؤقتة وتقرير يستغرق ثماني ثوان رمزاً واحداً لكل منهما؛ رجّح المسارات المكلفة أو أعطها حداً خاصاً.
  • نافذة ثابتة مع حد ضيق. دفعة الحدود تعني أن ذروتك الحقيقية ضعف الرقم المنشور.
  • عدم وجود هامش للدفعات. الحد المنتظم تماماً يرفض حركة طبيعية، لأن العملاء الحقيقيين يأتون على شكل تجمعات.
  • حدود غير موثَّقة. إن لم يكن الرقم في وثائقك وفي ترويساتك، فسيكتشفه كل مطور دمج في بيئة الإنتاج.
  • إعادة المحاولة بلا تباين عشوائي. المحاولات المتزامنة هي الطريق لتحويل ارتفاع قصير إلى ارتفاع مستمر.

احسب حدودك

حد المعدل الجيد ممل: ينظّم العملاء وتيرتهم من ترويساتك، وتُستوعب الدفعات، وتُكبَح الإساءة، ولا يلاحظ أحد شيئاً. والوصول إلى ذلك حسابٌ في معظمه وصدقٌ بشأن طاقتك الحقيقية. ابدأ من حد ونافذة تستطيع إدامتهما فعلاً، وحوّلهما إلى الفاصل وقيمة Retry-After التي يحتاجها عملاؤك، وانشر كليهما، وسجّل الحالات التي كادت تتجاوز الحد لتفرّق بين حد ضيق أكثر من اللازم وعميل سيئ التصرف.

أدوات وأدلة ذات صلة:

الأسئلة الشائعة

ما الحد الافتراضي المناسب لـ API عامة؟⌄

لا يوجد رقم عام، لأن الأمر يتوقف على ما يكلفك الطلب الواحد. ونقطة بداية شائعة لـ API من نوع JSON تغلب عليها القراءة هي 1000 طلب في الساعة لكل مفتاح مع دفعة من 20 إلى 60، ثم الضبط حسب مئيناتك أنت. قِس معالجتك المستدامة، واقسم على العملاء المتزامنين المتوقعين، وأبقِ الحد فوق المئين 99 للحركة الشرعية كي لا تُستدعى بسبب مستخدمين حقيقيين.

ما الفرق بين دلو الرموز والدلو المثقوب؟⌄

يسمح دلو الرموز بالدفعات حتى حجم الدلو ثم يستقر على معدل التعبئة، وهذا يناسب الـ API العامة لأن العملاء الحقيقيين يأتون على شكل تجمعات. أما الدلو المثقوب فيضع الطلبات في طابور ويحرّرها بمعدل ثابت، فيكون المخرَج منتظماً تماماً لكن الطلبات تنتظر بدلاً من أن تفشل سريعاً. استخدم الدلو المثقوب أمام خلفية لا تحتمل أي ارتفاع، ودلو الرموز في كل ما عدا ذلك.

لماذا تمثل النافذة الثابتة مشكلة؟⌄

بسبب دفعة الحدود. فالعميل الذي يستنفد مخصصه كله في نهاية نافذة ثم مخصصه كله في بداية التالية يسلّم ضعف ذروتك المقصودة في ثوان قليلة، وهو مع ذلك داخل السياسة من الناحية الشكلية. والنافذة المنزلقة تعد على الفترة السابقة، فيُرفض هذا النمط رفضاً صحيحاً.

أي رمز حالة ينبغي أن يعيده مُحدِّد المعدل؟⌄

الرمز 429 Too Many Requests مع ترويسة Retry-After. وهو الرمز الوحيد الذي يخبر العميل بأن الطلب كان صحيحاً وسينجح لاحقاً، وهذا ما ينتج إعادة محاولة سليمة. فالرمز 403 يُقرأ كأنه دائم والرمز 500 كأنه خطأ من الخادم، وكلاهما يدفع العملاء إلى سلوك سيئ.

كيف ينبغي لعميلي أن يتعامل مع الرمز 429؟⌄

احترم Retry-After إن وُجد. وإن لم يوجد فتمهّل تمهلاً تضاعفياً: ثانية، ثم ثانيتان، ثم أربع، ثم ثماني، مع إضافة تباين عشوائي إلى كل مدة انتظار كي لا يعيد العملاء الذين فشلوا معاً المحاولة معاً. وحدِّد المحاولات بثلاث إلى خمس ثم أعلِن الفشل. والأفضل من ذلك أن تقرأ RateLimit-Remaining في كل استجابة وتتمهل قبل أن تُرفض.

هل أحدّد المعدل حسب عنوان الـ IP أم حسب مفتاح الـ API؟⌄

حسب مفتاح الـ API للحركة الموثَّقة: فهو عادل، ويصمد أمام تغيّر شبكة العميل، ويتيح لك تقديم مستويات. والـ IP هو الخيار الوحيد للطلبات المجهولة، لكنه يعامل مكتباً كاملاً خلف NAT كعميل واحد وكاشطاً موزَّعاً كعملاء كثيرين. ومعظم الـ API الناضجة تطبّق الاثنين، مع حد أصرم لكل نقطة وصول على المسارات المكلفة.

عن الكاتب
المؤسس والرئيس التنفيذي، BuildToolForge
تابعنا على X: @Buildtoolforge

خبرة عملية تزيد على 15 عامًا في تطوير الويب وأمنه. يركّز على أمن الويب العملي: الحفاظ على المواقع آمنة وموثوقة وسهلة التشخيص. وُجد BuildToolForge ليجعل هذه الفحوصات مجانية وخاصة ومفهومة. تعمل الأدوات في متصفحك كلما أمكن، ولا يُخزَّن أي شيء تُدخله في أداة.

كيف نكتب أدلتنا: يُكتب كل دليل من خبرة عملية، ويُراجَع وفق المعايير الرسمية، ويُختبر بأدواتنا على نطاقات حقيقية، ونحدّثه عندما تتغير المعايير أو الأدوات. وجدت خطأً؟ راسلنا على contact@buildtoolforge.com.

آخر تحديث: 2 نوفمبر 2026