لمیٹر
یہ Fiber کے لئے ایک مدیانے ویئر ہے جو عوامی API اور یا اینڈ پوائنٹس (مثلاً پاس ورڈ دوبارہ ترتیب دینا) کی تکراری درخواستوں کو محدود کرنے کے لئے استعمال ہوتا ہے۔ یہ API کلائنٹس، ویب کرالرز یا دیگر تسکوں کی ریٹ محدود کرنے کے لئے بھی مفید ہے۔
نوٹ: یہ مدیانے ہمارے Storage پیکیج کا استعمال کرتی ہے تاکہ متفرق ڈیٹا بیسز کو ایک متحدہ انٹرفیس کے ذریعے سپورٹ کرے۔ ایسی فرض شدہ تشکیل ڈیفالٹ طور پر میموری میں ڈیٹا کو ذخیرہ کرتی ہے، اور آپ دی گئی مثال سے دیگر ڈیٹا بیسز دیکھ سکتے ہیں۔
نوٹ: ڈیفالٹ طور پر یہ ماڈیول دوسرے پروسیس/سروروں سے حالت شیئر نہیں کرتا۔
سگنیچر
func New(config ...Config) fiber.Handler
مثال
Fiber ویب فریم ورک کا حصہ کے طور پر مدیانے پیکیج کو درآمد کریں:
import (
"github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/middleware/limiter"
)
Fiber ایپ بنانے کے بعد، آپ مندرجہ زیل اختیارات استعمال کرسکتے ہیں:
// ڈیفالٹ تشکیل کے ساتھ شروع کریں
app.Use(limiter.New())
// یا اپنی تشکیل کے ساتھ وسیع کریں
app.Use(limiter.New(limiter.Config{
Next: func(c *fiber.Ctx) bool {
return c.IP() == "127.0.0.1"
},
Max: 20,
Expiration: 30 * time.Second,
KeyGenerator: func(c *fiber.Ctx) string {
return c.Get("x-forwarded-for")
},
LimitReached: func(c *fiber.Ctx) error {
return c.SendFile("./toofast.html")
},
Storage: myCustomStorage{},
}))
سلائیڈنگ ونڈو
آپ مخیل کونفیگریشن کو ترتیب دینے کے بجائے معمولی محدودیت ونڈو الگارتھم کی بجائے سلائیڈنگ ونڈو الگارتھم کو فعال کرسکتے ہیں۔
مثالی تشکیل مندرجہ ذیل ہے:
app.Use(limiter.New(limiter.Config{
Max: 20,
Expiration: 30 * time.Second,
LimiterMiddleware: limiter.SlidingWindow{},
}))
اس کا مطلب ہے کہ ہر ونڈو پچھلی ونڈو (اگر کوئی ہو) کو بھی مد نظر رکھے گی۔ دی گئی ریٹ کے لئے فارمولا مندرجہ ذیل ہے:
weightOfPreviousWindow = previous window's amount of requests * (whenNewWindow / Expiration)
rate = weightOfPreviousWindow + current window's amount of requests.
کانفیگریشن
خصوصیت | قسم | تفصیل | ڈیفالٹ |
---|---|---|---|
Next | func(*fiber.Ctx) bool |
Next وہ فنکشن وضاحت کرتا ہے جو اس مدیانے کو چھوڑنے کا فیصلہ کرنے پر true واپس کرتا ہے۔ | nil |
Max | int |
Expiration سیکنڈ میں روابط کی زیادہ تعداد جو اگر پار کی جائے تو 429 ریSPONS ملے گا۔ |
5 |
KeyGenerator | func(*fiber.Ctx) string |
KeyGenerator آپ کو کسٹم کلیدیں بنانے کی اجازت دیتا ہے، ڈیفالٹ طور پر c.IP() کا استعمال ہوتا ہے۔ | c.IP() کا استعمال کرنے والا فنکشن |
Expiration | time.Duration |
Expiration فراہم کردہ وقت ہے تکہ درخواست کے ریکارڈ میموری میں رکھے رہ سکیں۔ | 1 * time.Minute |
LimitReached | fiber.Handler |
حد تک پہنچنے پر بلایا جاتا ہے۔ | 429 ریSPONS بھیجنے والا فنکشن |
SkipFailedRequests | bool |
اگر صحیح ہو تو، 400 یا اس سے زیادہ StatusCodE والی درخواستوں کو شمار نہیں کیا جائے گا۔ | false |
SkipSuccessfulRequests | bool |
اگر صحیح ہو تو، 400 کم StatusCodE والی درخواستوں کو شمار نہیں کیا جائے گا۔ | false |
Storage | fiber.Storage |
مدیانے کی حالت کو ذخیرہ کرنے کے لئے استعمال ہونے والا اسٹور | صرف موجودہ پروسیس کے لئے میموری اسٹوریج |
LimiterMiddleware | LimiterHandler |
LimiterMiddleware مدیانے کو implement کرنے والا سٹرکٹ ہے | ایک نیا فکسڈ ونڈو ریٹ محدود کنندہ |
وقت (منسوخ) | time.Duration |
منسوخ: اس استعمال کریں Expiration کی بجائے۔ | - |
استور (منسوخ) | fiber.Storage |
منسوخ: استعمال کریں استورِ بجائے۔ | - |
کلید (منسوخ) | func(*fiber.Ctx) string |
منسوخ: استعمال کریں KeyGenerator کی بجائے۔ | - |
نوٹ: اگر کسٹم اسٹوریج
Storage
انٹرفیس کو implement کرتا ہے، تو آپ کسٹم اسٹوریج استعمال کرسکتے ہیں - مزید معلومات اور مثالوں کے لئے براہ کرمstore.go
دیکھیں۔
ڈیفالٹ کانفیگریشن
var ConfigDefault = Config{
Max: 5,
Expiration: 1 * time.Minute,
KeyGenerator: func(c *fiber.Ctx) string {
return c.IP()
},
LimitReached: func(c *fiber.Ctx) error {
return c.SendStatus(fiber.StatusTooManyRequests)
},
SkipFailedRequests: false,
SkipSuccessfulRequests: false,
LimiterMiddleware: FixedWindow{},
}
کسٹم اسٹوریج/ ڈیٹابیس
آپ ہمارے storage پیکیج میں کسی بھی استوریج ترتیب استعمال کرسکتے ہیں۔
storage := sqlite3.New() // github.com/gofiber/storage/sqlite3 سے
app.Use(limiter.New(limiter.Config{
Storage: storage,
}))