En informática, la idempotencia es una propiedad de una operación en la que aplicarla varias veces tiene el mismo efecto final que aplicarla solo una vez. Si envías la misma solicitud a un servidor cinco veces, un sistema idempotente garantiza que el resultado en el servidor no cambie después del primer intento exitoso.
Además de garantizar el mismo resultado, una característica clave de las operaciones idempotentes es que no producen efectos secundarios con llamadas adicionales. Este es un requisito fundamental para crear sistemas distribuidos resilientes en los que las interrupciones intermitentes de la red o los tiempos de espera pueden hacer que un cliente envíe el mismo mensaje más de una vez.
Analogía: Piensa en el botón "subir" de un ascensor. Si lo presionas una vez, el ascensor se llama a tu piso. Si lo presionas diez veces más mientras esperas, el resultado es el mismo: un ascensor llega a tu piso. Presionar el botón varias veces no hace que aparezcan diez ascensores separados. Por el contrario, agregar un artículo a un carrito de compras digital no suele ser idempotente. Si haces clic en el botón "Agregar al carrito" cinco veces, es probable que termines con cinco ejemplares de ese artículo en tu cesta.
Vuelve a intentar las solicitudes de forma segura después de un tiempo de espera o una caída de la conexión sin temor a duplicar acciones (como cobrar dos veces a una tarjeta de crédito).
Los usuarios no necesitan un seguimiento de estado complejo para saber si una solicitud anterior tuvo éxito; simplemente pueden "reintentar hasta que tenga éxito".
Los sistemas distribuidos pueden recuperarse de fallas reproduciendo registros o reenviando mensajes perdidos sin dañar los datos.
El estándar REST define cómo deben comportarse los diferentes tipos de solicitudes web. Algunos métodos HTTP son naturalmente "seguros" o idempotentes por diseño, lo que significa que la especificación espera que se comporten de manera predecible incluso cuando se repiten. Otros están diseñados para crear datos nuevos y requieren un cuidado adicional para que sean seguros en los reintentos.
Según RFC 9110, varios métodos estándar son inherentemente idempotentes. Repetir estas acciones no debería cambiar el estado del servidor más allá de la solicitud inicial.
Algunos métodos no son idempotentes porque su trabajo principal es cambiar los datos de una manera que cree algo nuevo o modifique una parte de un registro existente.
La idempotencia suele ser necesaria en los sistemas que creamos. En algunos casos, se maneja por nosotros. En otros, los desarrolladores debemos tomar medidas para que esto suceda.
El ejemplo más famoso es el problema del "doble cargo". Si el navegador de un usuario se congela mientras paga un vuelo, es posible que haga clic en "Pagar" de nuevo. Una API de pago que usa una clave de idempotencia garantiza que el segundo clic se reconozca como un reintento. Esto protege la cuenta bancaria del cliente y reduce el costo operativo de administrar los reembolsos por transacciones duplicadas.
Herramientas como Terraform y Ansible dependen de la idempotencia. Cuando ejecutas una secuencia de comandos para "crear un bucket de almacenamiento de 10 GB", la herramienta verifica el estado actual de tu nube.
Las APIs web modernas suelen implementar el encabezado Idempotency-Key (ahora un borrador estandarizado de IETF) para permitir que los desarrolladores creen integraciones más sólidas.
Un "upsert" (actualización o inserción) es una operación de base de datos idempotente clásica. En lugar de un simple "insertar", un upsert dice: "Si este registro existe, actualízalo; si no, créalo".
Google Cloud ofrece varias herramientas que facilitan la implementación de estos patrones para los desarrolladores. La creación en una plataforma administrada reduce la cantidad de código estándar que necesitas escribir para mantener tus datos seguros.


Aprende a implementar servicios resilientes e idempotentes en Cloud Run hoy mismo.