الهوية

يسمح الوسيطة المساكنة في Fiber بإنشاء واجهات برمجة تطبيقات متعددة الأعطال، حيث لا تتسبب الطلبات المتكررة (على سبيل المثال، بسبب مشاكل شبكة العميل) في تنفيذ نفس العملية بشكل خاطئ مرات عديدة على الخادم، مما يعد آلية هوية 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 عمر هوية أقصى لمفتاح الوسمية. 30 * time.Minute
KeyHeader string اسم الرأس الذي يحتوي على مفتاح الوسمية. "X-Idempotency-Key"
KeyHeaderValidate func(string) error يعرف KeyHeaderValidate دالة للتحقق من صحة بنية رأس الوسمية. دالة للتحقق من صحة UUID
KeepResponseHeaders []string القائمة السليمة للرؤوس التي يجب الاحتفاظ بها من الاستجابة الأصلية. nil (يحتفظ بجميع الرؤوس)
Lock Locker يقفل مفتاح الوسمية. قفل في الذاكرة
Storage fiber.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 هو 36 حرفًا
            return fmt.Errorf("%w: الطول غير صالح: %d != %d", ErrInvalidIdempotencyKey, l, wl)
        }
        return nil
    },
    KeepResponseHeaders: nil,
    Lock: nil, // تعيين في configDefault لتجنب تخصيص البيانات هنا
    Storage: nil, // تعيين في configDefault لتجنب تخصيص البيانات هنا
}