الهوية
يسمح الوسيطة المساكنة في 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 لتجنب تخصيص البيانات هنا
}