القراء مثلك يساعدون في دعم MUO. عند إجراء عملية شراء باستخدام الروابط الموجودة على موقعنا ، فقد نربح عمولة تابعة.

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

يعد تحديد المعدل أحد الأساليب التي يمكنك استخدامها للتحكم في حركة المرور على تطبيقك أو شبكتك.

ما هو معدل الحد؟

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

يُعد تحديد المعدل أمرًا شائعًا لتقليل الهجمات الإلكترونية مثل القوة الغاشمة و DDoS (رفض الخدمة الموزع)، يحد تجريف على شبكة الإنترنتوطلبات واجهة برمجة التطبيقات وتفاعلات المستخدم غير المنتظمة الأخرى مثل أتمتة الروبوتات وإجهاد الخادم.

يوفر Go دعمًا من الدرجة الأولى لتطبيقات تحديد المعدل في معدل الحزمة التي توفر محددًا للمعدل وتتفاعل مع وقت طَرد.

ال معدل الحزمة هي جزء من مشروع Go ، لكن الحزمة غير متوفرة في المكتبة القياسية. ستحتاج إلى تثبيت الحزمة بامتداد يحصل يأمر.

instagram viewer

قم بتشغيل هذا الأمر في المحطة الطرفية لدليل العمل الخاص بك لإضافة الحزمة إلى تبعيات مشروعك.

يذهب احصل على "golang.org/x/time/rate"

قم باستيراد هذه الحزم إلى ملف Go الخاص بك لهذا البرنامج التعليمي.

يستورد (
"ترميز / json"
"golang.org/x/time/rate"
"سجل"
"net / http"
)

ال json الحزمة هي لتشفير البنية مثل JSON للعميل. ستستخدم ملف سجل الحزمة ل سجل أخطاء وحدة التحكم و http الحزمة لبناء نقطة النهاية والبرمجيات الوسيطة وبدء الخادم.

إنشاء واجهة برمجة تطبيقات بسيطة بنقطة نهاية واحدة

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

إليك نموذج البنية الذي يحتوي على حقول سلسلة ستقوم بتشفيرها إلى العميل.

يكتب رسالة هيكل {
إجابة خيط`json:" رد "`
وصف خيط`json:" الوصف "`
}

ستقوم وظيفة المعالج بتعيين نوع المحتوى إلى JSON ، وكتابة رمز حالة ناجح ، وإرجاع مثيل هيكلي مشفر إلى العميل.

funcمثال على نقطة النهاية(الكاتب http. ResponseWriter ، طلب * http. طلب) {
كاتب. Header (). Set ("Content-Type"، "application / json")
كاتب. WriteHeader (http. موافق)
الرسالة: = الرسالة {
الرد: "ناجح" ،
الوصف: "لقد نجحت في الوصول إلى نقطة نهاية API" ،
}
يخطئ: = json. NewEncoder (كاتب) .Encode (& message)
لو يخطئ! لا شيء {
يعود
}
}

ال مثال على نقطة النهاية المعالج تأخذ في http طَرد كاتب و طلب مثيل الطريقة وإرجاع رسالة إلى العميل بامتداد كاتب مثال.

معدل الحد من تطبيق Simple Go

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

إليك كيفية إنشاء محدد السعر وتفويض المستخدمين بناءً على عدد الطلبات.

funcrateLimiter(التالي func(الكاتب http. ResponseWriter ، طلب * http. طلب)) http.المعالج {
المحدد: = المعدل. NewLimiter (3, 6) // بحد أقصى 6 طلبات ثم ثلاثة طلبات أخرى في الثانية
يعود http. المعالجfunc(الكاتب http. ResponseWriter ، طلب * http. طلب) {
لو! محدد. يسمح() {
كاتب. يكتب([]بايت("حد معدل تجاوز "))
يعود
} آخر {
مثال على نقطة النهاية (كاتب ، طلب)
}
})
}

ال rateLimiter handler function هي برمجية وسيطة تقبل دالة المعالج كوسيطة وتعيد نتيجة التفويض بعد إنشاء محدد معدل جديد باستخدام NewLimiter طريقة تأخذ معلمتين لعدد الطلبات في الثانية بعد الحد الأقصى المحدد للطلبات.

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

funcرئيسي() {
http. HandleFunc ("/ home" ، rateLimiterMiddleware (endpointExample))
يخطئ: = http. ListenAndServe (":8080", لا شيء)
لو يخطئ! لا شيء {
سجل. Println ("حدث خطأ أثناء الاستماع على المنفذ:8080"، يخطئ)
}
}

ال رئيسي وظيفة يتصاعد /home نقطة النهاية إلى rateLimiter المعالج الذي يأخذ في مثال على نقطة النهاية وظيفة المعالج.

ال استمع وخدم طريقة بدء الخادم على منفذ المضيف المحلي 8080 وإرجاع الأخطاء المحتملة.

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

ل أنا في {1..10}; يفعل لفة http://localhost: 8080 / منزل ؛ منتهي

الكود يضرب /home عشر مرات مع الطلب. ها هي نتيجة الطلبات.

بعد الطلب السادس (الحد الأقصى) ، يكون العميل غير مصرح له ولم يعد بإمكانه الوصول إلى نقطة النهاية.

تحديد السعر مهم

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