İdempotence
Fiber'ın idempotence ara yazılımı, tekrarlanan isteklerin (örneğin, istemci ağ sorunlarından kaynaklanan) sunucuda aynı işlemin yanlışlıkla birden çok kez gerçekleştirilmesine neden olmamasına izin verir ve genel bir API idempotence mekanizması olarak hizmet verir.
Fonksiyon İmzası
func New(config ...Config) fiber.Handler
Örnek Kod
Fiber web çatısının ara yazılım paketini içe aktarın.
import (
"github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/middleware/idempotency"
)
Varsayılan Yapılandırma
Fiber uygulamasını başlattıktan sonra, ara yazılıma doğrudan başvurulabilir.
app.Use(idempotency.New())
Özel Yapılandırma
app.Use(idempotency.New(idempotency.Config{
Lifetime: 42 * time.Minute,
// ...
}))
Yapılandırma Seçenekleri
Özellik | Tür | Açıklama | Varsayılan Değer |
---|---|---|---|
Next | func(*fiber.Ctx) bool |
Next, true döndürdüğünde ara yazılımı atlamak için bir işlev tanımlar. | Güvenli yöntem kullanımı için bir işlev |
Lifetime | time.Duration |
Lifetime, idempotence anahtarının maksimum ömrüdür. | 30 * time.Minute |
KeyHeader | string |
KeyHeader, idempotence anahtarını içeren başlık adıdır. | "X-Idempotency-Key" |
KeyHeaderValidate | func(string) error |
KeyHeaderValidate, idempotence başlığının sözdizimini doğrulamak için bir işlev tanımlar. | UUID doğrulaması için bir işlev |
KeepResponseHeaders | []string |
KeepResponseHeaders, orijinal yanıtın saklanacağı başlık listesidir. | nil (tüm başlıkları saklar) |
Lock | Locker |
Lock, idempotence anahtarını kilitler. | Bellekte bir kilit |
Storage | fiber.Storage |
Storage, idempotence anahtarına göre yanıt verilerini depolar. | Bellekte depolama |
Varsayılan Yapılandırma
var ConfigDefault = Config{
Next: func(c *fiber.Ctx) bool {
// İstek güvenli HTTP yöntemleri kullanılarak yapıldıysa ara yazılımı atla
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 uzunluğu 36 karakterdir
return fmt.Errorf("%w: geçersiz uzunluk: %d != %d", ErrInvalidIdempotencyKey, l, wl)
}
return nil
},
KeepResponseHeaders: nil,
Lock: nil, // Veri tahsisini burada önlemek için configDefault'ta ayarlandı
Storage: nil, // Veri tahsisini burada önlemek için configDefault'ta ayarlandı
}