میانافزار محدودیت نرخ (RateLimit)
میانافزار محدودیت نرخ مسئول کنترل تعداد درخواستها در بازه زمانی مشخص است.
هدف
این میانافزار از ارسال بیش از حد درخواست توسط کاربران یا IPها جلوگیری میکند.
نحوه کار
- بررسی تنظیمات rate limit در route
- استفاده از
rate-limiter-flexibleبرای کنترل نرخ - اعمال محدودیت بر اساس IP، fingerprint یا کاربر
- ارسال هدر
Retry-Afterدر صورت بلوک
تنظیمات Route
{
path: "/api/users",
methods: ["post"],
rateLimit: {
profile: {
points: 10, // تعداد درخواست مجاز
duration: 60 // بازه زمانی (ثانیه)
types: ["ip", "user"], // انواع محدودیت
},
errorMessage: "Too many requests",
errorStatusCode: 429
}
}
و یا میتوانید از دیکوریتور
api.rateLimitاستفاده کنید.
انواع محدودیت
IP Address
types: ["ip"];
// محدودیت بر اساس آدرس IP کلاینت
User ID
types: ["user"];
// محدودیت بر اساس ID کاربر احراز هویت شده
Fingerprint
types: ["fingerprint"];
// محدودیت بر اساس fingerprint دستگاه
ویژگیها
- انعطافپذیری: تنظیمات سفارشی برای هر route
- پشتیبانی چندگانه: محدودیت همزمان بر اساس چندین عامل
- ذخیرهسازی: استفاده از RateLimiterStore برای ذخیره وضعیت
- هدر Retry-After: اطلاع زمان انتظار به کلاینت
خطاها
429 Too Many Requests: تعداد درخواستها بیش از حد مجاز- تنظیم هدر
Retry-Afterبا زمان انتظار
مثال استفاده
// محدودیت 100 درخواست در ساعت برای API عمومی
{
rateLimit: {
profile: { points: 100, duration: 3600, types: ["ip"] },
}
}
// محدودیت 5 درخواست در دقیقه برای کاربر
{
rateLimit: {
profile: { points: 5, duration: 60, types: ["user"] },
}
}
ملاحظات
- نیاز به نصب
rate-limiter-flexible - استفاده از ذخیرهسازی داخلی برای نگهداری وضعیت
- امکان تنظیم پیام خطا و کد وضعیت سفارشی