跳至主要内容
版本:v2.x

幂等性

适用于 Fiber 的幂等性中间件允许容错 API,其中重复请求(例如由于客户端的网络问题)不会错误地导致服务器端多次执行相同操作。

请参阅 https://datatracker.ietf.org/doc/html/draft-ietf-httpapi-idempotency-key-header-02 以便更好地理解。

签名

func New(config ...Config) fiber.Handler

示例

导入 Fiber Web 框架中包含的中间件包

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,
// ...
}))

配置

属性类型描述默认值
下一个func(*fiber.Ctx) boolNext 定义一个函数,当返回 true 时跳过此中间件。安全方法的函数
生存期time.Duration生存期是幂等性密钥的最大生存期。30 * time.Minute
KeyHeaderstringKeyHeader 是包含幂等性密钥的标头的名称。"X-Idempotency-Key"
KeyHeaderValidatefunc(string) errorKeyHeaderValidate 定义一个函数来验证幂等性标头的语法。UUID 验证函数
KeepResponseHeaders[]stringKeepResponseHeaders 是一个标头列表,这些标头应从原始响应中保留。nil(保留所有标头)
LockLockerLock 锁定幂等性密钥。内存中锁
Storagefiber.StorageStorage 按幂等性密钥存储响应数据。内存中存储

默认配置

var ConfigDefault = Config{
Next: func(c *fiber.Ctx) bool {
// Skip middleware if the request was done using a safe HTTP method
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 chars
return fmt.Errorf("%w: invalid length: %d != %d", ErrInvalidIdempotencyKey, l, wl)
}

return nil
},

KeepResponseHeaders: nil,

Lock: nil, // Set in configDefault so we don't allocate data here.

Storage: nil, // Set in configDefault so we don't allocate data here.
}