幂等性
适用于 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) bool | Next 定义一个函数,当返回 true 时跳过此中间件。 | 安全方法的函数 |
生存期 | time.Duration | 生存期是幂等性密钥的最大生存期。 | 30 * time.Minute |
KeyHeader | string | KeyHeader 是包含幂等性密钥的标头的名称。 | "X-Idempotency-Key" |
KeyHeaderValidate | func(string) error | KeyHeaderValidate 定义一个函数来验证幂等性标头的语法。 | UUID 验证函数 |
KeepResponseHeaders | []string | KeepResponseHeaders 是一个标头列表,这些标头应从原始响应中保留。 | nil(保留所有标头) |
Lock | Locker | Lock 锁定幂等性密钥。 | 内存中锁 |
Storage | fiber.Storage | Storage 按幂等性密钥存储响应数据。 | 内存中存储 |
默认配置
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.
}