Idempotence(冪等性)
Fiberのidempotenceミドルウェアを使用すると、クライアントのネットワークの問題による繰り返しのリクエストなどで、同じ操作がサーバーで誤って複数回実行されることを防ぐことができます。これは一般的なAPIの冪等性メカニズムとして機能し、フォールトトレランス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を返すとミドルウェアがスキップされます。 | セーフなHTTPメソッドの使用に関する関数 |
Lifetime | time.Duration |
Lifetime は冪等性キーの最大有効期間です。 | 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 {
// 安全な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で設定します
}