আইডেম্পোটেন্স

Fiber এর আইডেম্পোটেন্স মিডলওয়্যার ফলাফল-টোলারেন্ট API তৈরি করার জন্য পেশ করে, যেখানে পুনরাবৃত্তি করা অনুরোধ (উদাহরণস্বরূপ, ক্লায়েন্ট নেটওয়ার্ক সমস্যায় কারণে) সার্ভারে একই অপারেশনটি অশুদ্ধভাবে একাধিক বার না সারণীভুত হয়, যাতে এটি একটি সাধারণ API আইডেম্পোটেন্স মেকানিজ়ম হিসেবে কাজ করে।

ফাংশন সিগনেচার

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

উদাহরণ কোড

Fiber ওয়েব ফ্রেমওয়ার্কের মিডলওয়্যার প্যাকেজ ইম্পোর্ট করুন।

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

ডিফল্ট কনফিগারেশন

Fiber অ্যাপ্লিকেশন ইনিশিয়ালাইজ করার পরে, মিডলওয়্যারটি সরাসরি রেফারেন্স করা যেতে পারে।

app.Use(idempotency.New())

কাস্টম কনফিগারেশন

app.Use(idempotency.New(idempotency.Config{
    Lifetime: 42 * time.Minute,
    // ...
}))

কনফিগারেশন অপশনস

প্রপার্টি টাইপ বর্ণনা ডিফল্ট মান
Next func(*fiber.Ctx) bool Next হলো একটি ফাংশন, যা মিডলওয়্যার এটি যদি true রিটার্ন করে তাহলে মিডলওয়্যারটি স্কিপ করা হবে। সুরক্ষিত মেথড ব্যবহারের জন্য একটি ফাংশন
Lifetime time.Duration Lifetime হলো আইডেম্পোটেন্স কীর্তির্নাশী উপাদান। 30 * time.Minute
KeyHeader string KeyHeader হলো হেডার এর নাম, যা আইডেম্পোটেন্স কী ধারণ করে। "X-Idempotency-Key"
KeyHeaderValidate func(string) error KeyHeaderValidate হলো হেডারের সিনট্যাক্স যাচাই করার জন্য একটি ফাংশন। ইউইডি ভ্যালিডেশনের জন্য একটি ফাংশন
KeepResponseHeaders []string KeepResponseHeaders হলো অবশিষ্ট প্রতিক্রিয়ার হেডার এর তালিকা। nil (সমস্ত হেডার রক্ষণ করে)
Lock Locker Lock হলো আইডেম্পোটেন্স কী লক করা। মেমোরিতে একটি লক
Storage fiber.Storage Storage হলো কীর্তির্নাশী কী অনুযায়ী সরবরাহ তথ্য সংরক্ষণ করে। মেমোরিতে স্টোরেজ

ডিফল্ট কনফিগারেশন

var ConfigDefault = Config{
    Next: func(c *fiber.Ctx) bool {
        // অটো সেফ HTTP মেথড ব্যবহার করার ক্ষেত্রে মিডলওয়্যারটি স্কিপ করুন
        return fiber.IsMethodSafe(c.Method())
    },
    Lifetime: 30 * time.Minute,
    KeyHeader: "X-Idempotency-Key",
    KeyHeaderValidate: func(k string) error {
        if l, wl := len(k), 36; l != wl { // UUID দৈর্ঘ্য হলো ৩৬ অক্ষর
            return fmt.Errorf("%w: অবৈধ লম্বঃ %d != %d", ErrInvalidIdempotencyKey, l, wl)
        }
        return nil
    },
    KeepResponseHeaders: nil,
    Lock: nil, // এখানে ডেটা আবর্জনা করার জন্য কনফিগারেশনে সেট করা হয়েছে
    Storage: nil, // এখানে ডেটা আবর্জনা করার জন্য কনফিগারেশনে সেট করা হয়েছে
}