همانگرایی
میانافزار همانگرایی Fiber امکان ایجاد API های مقاوم در برابر خطا را فراهم میکند که در آنجا درخواستهای تکراری (مانند به دلیل مسائل شبکه مشتری) باعث اجرای چند بارهی عملیات مشابه بر روی سرور نمیشود، و به عنوان یک مکانیسم همانگرایی عمومی برای API ها عمل کرده وقتی که اجرا شود.
امضای تابع
func New(config ...Config) fiber.Handler
کد نمونه
وارد کردن بستهی میانافزار میانگذاری Fiber web framework.
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 |
اگر مقداری درست باشد، میانافزار را میگذراند. | یک تابع برای استفاده ایمن از متدها |
Lifetime | time.Duration |
عمر مفید بیشترین مدت زمان برای کلید همانگرایی است. | 30 * time.Minute |
KeyHeader | string |
نام هدری که شامل کلید همانگرایی است. | "X-Idempotency-Key" |
KeyHeaderValidate | func(string) error |
یک تابع برای اعتبارسنجی نحوهی هدر همانگرایی. | یک تابع برای اعتبارسنجی 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: invalid length: %d != %d", ErrInvalidIdempotencyKey, l, wl)
}
return nil
},
KeepResponseHeaders: nil,
Lock: nil, // در configDefault تنظیم شده تا اینجا اختصاص دادههای نرمافزاری را جلوگیری کند
Storage: nil, // در configDefault تنظیم شده تا اینجا اختصاص دادههای نرمافزاری را جلوگیری کند
}