Skip to content
العودة إلى المدونة
engineering6 دقيقة قراءة

تحديد معدل الطلبات والحماية من الإساءة في الـ API: دليل عملي

كيف يحافظ rate limiting والحماية من الإساءة على استقرار الـ backend: استراتيجيات throttling ودفاعات متعددة الطبقات وحدود لا تعاقب المستخدمين الحقيقيين.

SummationWorks
تحديد معدل الطلبات والحماية من الإساءة في الـ API: دليل عملي

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

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

ماذا يفعل rate limiting فعلياً

يحدد rate limiting عدد الطلبات التي يمكن لعميل معين إرسالها خلال نافذة زمنية محددة. عشر عمليات تسجيل دخول في الدقيقة. مئة استعلام بحث في الساعة. ألف طلب API في اليوم على الخطة المجانية. وعندما يتجاوز العميل حصته، يرفض الخادم الطلب بأدب عبر استجابة 429 Too Many Requests بدلاً من محاولة خدمة كل طلب مهما كانت التكلفة.

هذه الآلية الواحدة تحل عدة مشكلات في آن معاً:

  • تحمي الموارد المشتركة. لا يستطيع عميل واحد سيئ السلوك أن يحرم الجميع من اتصالات قاعدة البيانات أو الذاكرة أو المعالج.
  • تحتوي الهجمات. تعتمد هجمات حشو بيانات الاعتماد وتخمين كلمات المرور بالقوة الغاشمة والسحب جميعها على إرسال حجم كبير من الطلبات. والـ throttling يجعلها بطيئة ومكلفة.
  • تتحكم في التكلفة. في بنية serverless أو الدفع لكل طلب، تعني الحركة غير المنضبطة إنفاقاً غير منضبط. والحدود تضع سقفاً للضرر.
  • تتيح تسعيراً عادلاً. إذا كنت تبيع وصول API على هيئة طبقات، فإن rate limiting هو ما يجعل تلك الطبقات ذات معنى.

الـ rate limiting ليس هو نفسه المصادقة. تسأل المصادقة من أنت، بينما يسأل rate limiting كم مرة يحق لك فعل ذلك. أنت بحاجة إلى الاثنين، وهما يعملان معاً على أفضل وجه.

اختيار استراتيجية الـ throttling المناسبة

ليست كل أنواع الـ throttling متساوية، والخوارزمية التي تختارها تشكّل إحساس المستخدمين الحقيقيين بالـ API. تغطي ثلاث طرق معظم الاحتياجات الواقعية.

النافذة الثابتة (fixed window)

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

النافذة المنزلقة (sliding window)

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

دلو الرموز (token bucket)

دلو الرموز هو الأكثر مرونة بين الثلاثة، وهو ما نلجأ إليه غالباً. يملك كل عميل دلواً يُعاد ملؤه بمعدل ثابت. كل طلب ينفق رمزاً واحداً. وطالما توافرت الرموز، تمر الطلبات، ما يعني أن الـ API يستطيع امتصاص الدفعات القصيرة المشروعة مع فرض متوسط مستدام على المدى الطويل. إنه ملائم تماماً لخدمات الـ backend حيث يكون الاستخدام الحقيقي متفاوتاً بطبيعته.

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

بناء طبقات دفاع تتجاوز الحدود البسيطة

الـ rate limiting هو الأساس، لكن الحماية من الإساءة جدار متعدد الطبقات لا حاجز واحد. يقوم المهاجمون المصممون بتدوير عناوين IP، ومحاكاة المتصفحات الحقيقية، وتوزيع الطلبات على حسابات كثيرة للبقاء تحت أي حد منفرد. والـ backend الجاد يدافع على طبقات.

  • حدِّد هوية العملاء بدقة. التحديد بعنوان IP وحده ضعيف، لأن المهاجمين يتشاركون العناوين ويدوّرونها، بينما يجلس كثير من المستخدمين الشرعيين خلف بوابة شركة أو شبكة جوال واحدة. اجمع بين IP ومفتاح الـ API وهوية المستخدم المُصادَق عليه لتقيّد الطرف الصحيح.
  • احمِ المسارات المكلفة أولاً. تسجيل الدخول، وإعادة تعيين كلمة المرور، والدفع، والبحث، ورفع الملفات هي النقاط التي يعشقها المهاجمون والأكثر كلفة عليك. شدِّد عليها بقوة حتى لو بقي باقي الـ API مفتوحاً.
  • أضف جدار حماية للتطبيقات (WAF) وترشيح bots. يحجب الـ WAF وطبقة الـ CDN على الحافة الحركة المعروفة بسوئها قبل أن تصل إلى خوادمك، فيمتصان الهجمات الحجمية بكلفة أقل بكثير مما يستطيعه تطبيقك.
  • استخدم الاحتكاك التدريجي. بدلاً من حظر فوري قاسٍ، صعّد الأمر: أبطئ الاستجابات، ثم اطلب CAPTCHA، ثم اطلب إعادة المصادقة. يكاد المستخدمون الحقيقيون لا يلاحظون، بينما تتوقف الإساءة الآلية تماماً.
  • راقب الأنماط لا الأعداد فقط. الحركة المفاجئة من منطقة جديدة، أو ارتفاع محاولات الدخول الفاشلة، أو طلب آلاف معرّفات السجلات بالتسلسل، كلها إشارات على وجود خطأ حتى لو لم يتجاوز أي عميل منفرد الحد.

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

تطبيق الحدود دون الإضرار بالمستخدمين الحقيقيين

هدف الأمان هو إيقاف الإساءة، لا إحباط من يدفعون لك. وهناك ممارسات قليلة تبقي rate limiting ودوداً.

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

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

افشل بأمان عن وعي. إذا تعطلت طبقة rate limiting نفسها، قرّر مسبقاً ما إذا كان يجب السماح للطلبات بالمرور أم حجبها. بالنسبة لمعظم المنتجات، السماح بالحركة لفترة وجيزة أفضل من إسقاط الـ API بالكامل لمجرد تعثّر المُحدِّد.

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

أهم النقاط

  • يحدد rate limiting عدد مرات استدعاء العميل للـ API، فيحمي الموارد المشتركة، ويتحكم في التكلفة، ويُضعف هجمات القوة الغاشمة والسحب.
  • اختر خوارزمية الـ throttling لكل نقطة وصول؛ يتعامل token bucket جيداً مع الحركة الواقعية المتفاوتة، بينما تناسب النوافذ الصارمة المسارات الحساسة مثل تسجيل الدخول.
  • الحماية الحقيقية من الإساءة متعددة الطبقات: تحديد دقيق للعميل، وWAF، واحتكاك تدريجي، وكشف للأنماط يتجاوز مجرد عدّ الطلبات.
  • عامل المستخدمين الحقيقيين بعناية عبر استجابات 429 واضحة، وترويسات rate-limit معيارية، وحدود منشورة كي يستطيع العملاء الجيدون التكيف.
  • افرض الحدود من مخزن مشترك مثل Redis ليبقى الـ throttling متسقاً عبر كل خادم مع توسعك.

تُبنى معظم الـ APIs للمسار المثالي ولا تتعلم عن الحدود إلا بعد وقوع حادثة. إن كنت تطلق منتجاً، أو توسّع backend قائماً، أو قلِقاً من أن نقاط وصولك مكشوفة أكثر من اللازم، فيمكننا مساعدتك في تصميم throttling وحماية من الإساءة تصمد في الإنتاج. استكشف خدماتنا، وشاهد أعمالنا، أو تواصل معنا لنناقش نظامك الخلفي.

عن الكاتب

SummationWorks

SummationWorks is a software development company building web apps, mobile apps, and AI tools for startups and growing businesses across the US, UK, and GCC.

المزيد عنّا

لديك مشروع في ذهنك؟

لنحوّل فكرتك إلى برمجيات جاهزة للإنتاج.

ابدأ مشروعًا