Ir al contenido

Request Hashing

RequestHasher se utiliza para detectar si dos peticiones con la misma clave de idempotencia tienen contenido diferente. Esto evita que un cliente reutilice accidentalmente una clave para una operación distinta.

El enfoque más sencillo. Genera un hash basándose exclusivamente en el cuerpo (body) de la petición.

import "github.com/fco-gt/gopotency/hash"
manager, err := idempotency.NewManager(idempotency.Config{
Storage: store,
RequestHasher: hash.BodyHasher(),
})

Un enfoque más estricto que combina el Método HTTP, la Ruta (Path) y el Cuerpo.

RequestHasher: hash.FullHasher()

Los datos utilizados para el hash siguen el patrón: METODO:RUTA:CUERPO.

Puede implementar su propia lógica de hashing cumpliendo con la interfaz RequestHasher:

type MyHasher struct{}
func (h *MyHasher) Hash(req *idempotency.Request) (string, error) {
// Lógica personalizada: ej. hashear encabezados específicos + cuerpo
data := fmt.Sprintf("%s:%s", req.Headers["X-Custom-Context"], string(req.Body))
hash := sha256.Sum256([]byte(data))
return hex.EncodeToString(hash[:]), nil
}