সীমাবদ্ধকারী

এটা ফাইবারের জন্য একটি মিডলওয়্যার, যা জনগণের পাবলিক API এবং/অথবা এন্ডপয়েন্ট (উদাহরণস্বরূপ, পাসওয়ার্ড রিসেট) এর পুনরাবৃত্তি সীমাবদ্ধ করতে ব্যবহৃত হয়। এটা API ক্লায়েন্ট, ওয়েব ক্রলার, বা অন্যান্য কাজগুলির রেট সীমাবদ্ধ করার জন্য রূপান্তরবিকাশকের জন্য প্রস্তুত এবং উপযোগী।

দ্রষ্টব্য: এই মিডলওয়্যারটি আমাদের Storage প্যাকেজটি ব্যবহার করে, যা একটি প্রত্যাবর্তনী ইন্টারফেস মাধ্যমে বিভিন্ন ডাটাবেসগুলি সমর্থন করতে। ডিফল্ট কনফিগারেশন তথ্য মেমোরি তে সংরক্ষণ করে এবং অন্যান্য ডাটাবেস দেখতে নীচের উদাহরণটি দেখতে পারেন।

দ্রষ্টব্য: ডিফল্টভাবে, এই মডিউলটি অন্য প্রসেস/সার্ভারগুলির সাথে অবস্থা ভাগ করে না।

স্বাক্ষর

func New(config ...Config) fiber.Handler

উদাহরণ

ফাইবার ওয়েব ফ্রেমওয়ার্কের একটি অংশ হিসাবে মিডলওয়ের প্যাকেজটি আমদানি করুন:

import (
  "github.com/gofiber/fiber/v2"
  "github.com/gofiber/fiber/v2/middleware/limiter"
)

ফাইবার অ্যাপ তৈরির পরে, আপনি নিম্নলিখিত বিকল্পগুলি ব্যবহার করতে পারেন:

// ডিফল্ট কনফিগারেশনের সাথে আরম্ভ করুন
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.

কনফিগারেশন

প্রপার্টি ধরন বিবরণ ডিফল্ট
পরবর্তী func(*fiber.Ctx) bool পরবর্তী এই মিডলওয়্যারটি স্কিপ করতে একটি ফাংশন সংজ্ঞায়িত করে। নিল
Max int Expiration সেকেন্ডের মধ্যে সর্বাধিক যোগাযোগের সংখ্যা, যদি অতিক্রান্ত হয় তাহলে 429 সংবাদ প্রেরণ করে। 5
KeyGenerator func(*fiber.Ctx) string KeyGenerator আপনাকে কাস্টম কী জেনারেট করতে দেয়, ডিফল্টভাবে c.IP() ব্যবহার করার জন্য। c.IP() ব্যবহার করা ফাংশন ডিফল্ট মান।
Expiration time.Duration অনুরোধের রেকর্ড মেমোরিতে রাখার সময়। 1 * time.Minute
LimitReached fiber.Handler সীমা পৌঁছালে কল করা হয়। 429 সংবাদ প্রেরণ করা ফাংশন
SkipFailedRequests bool যদি সত্য হয়, তবে StatusCode > = 400 সংকেত সহ অনুরোধগুলি গণনা না করে। মিথ্যা
SkipSuccessfulRequests bool যদি সত্য হয়, তবে StatusCode < 400 সংকেত সহ অনুরোধগুলি গণনা না করে। মিথ্যা
Storage fiber.Storage মিডলওয়ের অবস্থা সংরক্ষণের জন্য ব্যবহৃত স্টোরে। বর্তমান প্রসেসের জন্য মেমোরি সংরক্ষণ
LimiterMiddleware LimiterHandler LimiterMiddleware হল লিমিটার মিডলওয়ের স্ট্রাক্ট প্রযোজ্য করা। একটি নতুন ফিক্সড উইন্ডো রেট লিমিটার
সর্বনিম্নতা (প্রবলীপ্ত) time.Duration প্রবলীপ্ত: পরিবর্তন করুন Expiration এর পরিবর্তে। -
স্টোর (প্রবলীপ্ত) fiber.Storage প্রবলীপ্ত: Storage এর পরিবর্তে ব্যবহার করুন। -
Key (প্রবলীপ্ত) func(*fiber.Ctx) string প্রবলীপ্ত: KeyGenerator এর পরিবর্তে ব্যবহার করুন। -

দ্রষ্টব্য: যদি কাস্টম স্টোরেজ স্টোরেজ ইন্টারফেস ইমপ্লিমেন্ট করে, তাহলে আপনি কাস্টম স্টোরেজ ব্যবহার করতে পারেন - অধিক তথ্য এবং উদাহরণের জন্য, দয়া করে 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,
}))