동질성
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에서 설정됩니다
}