La idempotencia (Idempotency) es la propiedad de una operación que garantiza que ejecutarla una o varias veces produce exactamente el mismo resultado. En matemáticas se expresa como f(f(x)) = f(x). En el diseño de APIs web, es un concepto clave para evitar procesamientos duplicados cuando se producen reintentos por fallos de red o timeouts.
La especificación HTTP define la idempotencia de cada método: GET, PUT y DELETE son idempotentes (ejecutarlos varias veces produce el mismo resultado), mientras que POST no lo es (cada ejecución puede crear un recurso nuevo).
En la API de un acortador de URL, la idempotencia es una cuestión central. Si se envía dos veces la misma petición para acortar una URL, ¿deben generarse dos URLs cortas distintas o debe devolverse la misma? En un diseño idempotente, la misma entrada siempre devuelve la misma URL acortada. Así, si un reintento se produce por un error de red, no se crean duplicados.
La técnica más habitual para implementar idempotencia es el uso de una Idempotency Key (clave de idempotencia). El cliente incluye en la petición un identificador único (por ejemplo, un UUID) y el servidor almacena en caché el resultado asociado a esa clave. Si llega otra petición con la misma clave, el servidor devuelve el resultado cacheado sin volver a procesar la operación. La API de pagos de Stripe es un ejemplo paradigmático de esta técnica.
En un acortador de URL, la idempotencia se combina con la normalización de URLs. Se normaliza la URL de entrada, se calcula su hash y se devuelve siempre el mismo código corto para el mismo hash. De este modo, "https://example.com/page" y "https://example.com/page/" se mapean a la misma URL acortada. Puedes encontrar libros relacionados en Amazon.