Help us shape the future of Go! Take the 2026 Go Developer Survey

idempotency

package
v0.0.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 24, 2024 License: MIT Imports: 10 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var ConfigDefault = Config{
	Next: func(c fiber.Ctx) bool {

		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 {
			return fmt.Errorf("%w: invalid length: %d != %d", ErrInvalidIdempotencyKey, l, wl)
		}

		return nil
	},

	KeepResponseHeaders: nil,

	Lock: nil,

	Storage: nil,
}

ConfigDefault is the default config

View Source
var ErrInvalidIdempotencyKey = errors.New("invalid idempotency key")

Functions

func IsFromCache

func IsFromCache(c fiber.Ctx) bool

func New

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

func WasPutToCache

func WasPutToCache(c fiber.Ctx) bool

Types

type Config

type Config struct {
	// Lock locks an idempotency key.
	//
	// Optional. Default: an in-memory locker for this process only.
	Lock Locker

	// Storage stores response data by idempotency key.
	//
	// Optional. Default: an in-memory storage for this process only.
	Storage fiber.Storage
	// Next defines a function to skip this middleware when returned true.
	//
	// Optional. Default: a function which skips the middleware on safe HTTP request method.
	Next func(c fiber.Ctx) bool

	// KeyHeaderValidate defines a function to validate the syntax of the idempotency header.
	//
	// Optional. Default: a function which ensures the header is 36 characters long (the size of an UUID).
	KeyHeaderValidate func(string) error

	// KeyHeader is the name of the header that contains the idempotency key.
	//
	// Optional. Default: X-Idempotency-Key
	KeyHeader string

	// KeepResponseHeaders is a list of headers that should be kept from the original response.
	//
	// Optional. Default: nil (to keep all headers)
	KeepResponseHeaders []string

	// Lifetime is the maximum lifetime of an idempotency key.
	//
	// Optional. Default: 30 * time.Minute
	Lifetime time.Duration
}

Config defines the config for middleware.

type Locker

type Locker interface {
	Lock(key string) error
	Unlock(key string) error
}

Locker implements a spinlock for a string key.

type MemoryLock

type MemoryLock struct {
	// contains filtered or unexported fields
}

func NewMemoryLock

func NewMemoryLock() *MemoryLock

func (*MemoryLock) Lock

func (l *MemoryLock) Lock(key string) error

func (*MemoryLock) Unlock

func (l *MemoryLock) Unlock(key string) error

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL