Imagina que un día estás intentando hacer una compra en Amazon y tu internet por casualidad falla y la pantalla se queda cargando infinitamente.

Es aquí cuando te haces mil preguntas en una milésima de segundo:

¿Será que recargar la página es una buena idea?

¿Le doy click de nuevo al botón de pagar? ¿Y si me cobra dos veces?

Cuando esto te pasa siendo un usuario, surgen muchas dudas. De hecho me pasó este mismo fin de semana 😂

Y entonces procedí a recargar la página y luego de revisar el banco, le di click al botón de "Pagar" nuevamente.

Me dió mucha curiosidad saber por qué no se cobró el dinero a pesar de que la conexión no parecía haberse caído y entonces di con las "Llaves de idempotencia".

Resulta que servicios como PayPal o Stripe, utilizan métodos para asegurar que cada transacción es única.

Una llave de idempotencia es, básicamente, un ID único que acompaña a tu transacción. Puede ser un UUID que es generado en el cliente y que va a ser enviado en todas las operaciones de transacción que hagas.

Piensa que es un carnet de identidad para cada operación (en este caso un pago).

Este código permite que el servidor que captura los pagos (como los de PayPal o Stripe) reconozca si una de estas ordenes se está intentando procesar más de una vez.

Vamos a desglosar cómo funcionan:

  1. Generación de la Llave: El cliente genera una llave única para cada operación de transacción. Esta generación puede basarse en varios métodos, incluidos UUIDs, hashes de los contenidos de la solicitud, o secuencias generadas por bases de datos.
  2. Envío de la Solicitud: La solicitud se envía al servidor con la llave de idempotencia incluida en los encabezados HTTP, por ejemplo, Idempotency-Key: <unique_key>.
  3. Verificación en el Servidor: Al recibir una solicitud, el servidor verifica si existe un registro previo de la llave:
    • Si la llave no existe, el servidor procesa la solicitud, crea un registro de la operación junto con la llave, y devuelve el resultado al cliente.
    • Si la llave existe, el servidor recupera el resultado de la operación original asociada con esa llave y lo devuelve al cliente sin volver a procesar la solicitud.
  4. Manejo de Expiración: Estas llaves pueden tener un tiempo límite de uso. Una vez expirada, la misma llave puede ser reutilizada para una nueva operación.

Para finalizar

Las llaves de idempotencia son como el árbitro en un partido de fútbol, asegurando que las reglas se cumplan y que no haya juego sucio (o pagos duplicados, en este caso).

Hacen que el mundo de las transacciones en línea sea un lugar más justo y predecible, donde solo pagas por lo que compras, ni más ni menos.

La próxima vez que tu pago pase a la primera sin problemas, aunque le hayas dado clic a "pagar" más veces de las que puedes contar, ya sabes a quién agradecerle.

Nos vemos en la edición #23

Además de agradecerle a las llaves de idempotencia por existir, recuerda a los ingenieros de PayPal y Stripe que las implementan.

Recuerda que si quieres hablar de algo en particular puedes sugerir el tema respondiendo este correo.

Hasta pronto 👊🏼

#22 Llaves de Idempotencia: Una explicación sin enredos