동질성

Fiber의 동질성 미들웨어는 재시도된 요청 (예: 클라이언트 네트워크 문제로 인한)이 서버에서 동일한 작업을 여러 번 잘못 실행하지 않도록하여 내결함성 있는 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를 반환하는 함수를 정의합니다. 안전한 메소드 사용을 위한 함수
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은 동질성 키를 잠근다(locks) 메모리 내 잠금
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에서 설정됩니다
}