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.
Hashers Disponibles
Sección titulada «Hashers Disponibles»Body Hasher (Predeterminado)
Sección titulada «Body Hasher (Predeterminado)»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(),})Full Hasher
Sección titulada «Full Hasher»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.
Hasher Personalizado
Sección titulada «Hasher Personalizado»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}