Idempotence

Fiber کا idempotence مڈی ویر allows کرتا ہے کے fault-tolerant APIs کی تخلیق کی اجازت ھے، جہاں دہری ہوتی ہوئی درخواستیں (مثلا، کلائنٹ نیٹ ورک مسائل کی بنا پر) سرور پر یکساں کام کو بار بار نہیں چلتی ہیں، چونکہ یہ ایک عمومی API idempotence mechanism کو پیش کرتی ہے۔

Function Signature

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 اگر یہ true واپس کرے تو mیڈی ویر کو چھوڑنا تعین کرتی ہے safe method usage کا فنکشن
Lifetime time.Duration Lifetime کوئی بھی idempotence کی کلید کا مقامی زندگی کا عرصہ ھے۔ 30 * time.Minute
KeyHeader string KeyHeader نام ہے header کا جو idempotence کی کلید شامل کرتا ہے۔ "X-Idempotency-Key"
KeyHeaderValidate func(string) error KeyHeaderValidate فنکشن ایک فنکشن کا تعین ہوتا ھے جو idempotence header کے syntax کی تصدیق کے لئے ہے۔ UUID validation کے لئے فنکشن
KeepResponseHeaders []string KeepResponseHeaders وہ ہیڈرز کی فہرست ھے جو اصل جواب سے محفوظ کی جائیں گی۔ nil (preserves all headers)
Lock Locker Lock idempotence کو کنجی بناتا ہے۔ A lock in memory
Storage fiber.Storage Storage idempotence کی کلید کے مطابقت سے ریسپانس ڈیٹا سٹور کرتا ہے۔ Storage in memory

پہلے تشکیل

var ConfigDefault = Config{
    Next: func(c *fiber.Ctx) bool {
        // آگر request safe HTTP methods کا استعمال کرکے کی جا رہی ہے تو مڈی ویر کو چھوڑینا
        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 length is 36 characters
            return fmt.Errorf("%w: invalid length: %d != %d", ErrInvalidIdempotencyKey, l, wl)
        }
        return nil
    },
    KeepResponseHeaders: nil,
    Lock: nil, // Set in configDefault to avoid data allocation here
    Storage: nil, // Set in configDefault to avoid data allocation here
}