Trata la entrega como al menos una vez y haz el manejador idempotente. Verifica primero la firma, luego guarda el id de evento del proveedor detrás de una restricción de unicidad y devuelve 200 de inmediato si ya lo has visto. Haz el cambio de estado y la inserción del id dentro de una misma transacción para que una caída no lo aplique a medias. Mantén el manejador rápido encolando el trabajo lento, y deja que el proveedor reintente cuando falles de verdad.
Por qué lo preguntan los entrevistadores
Los pagos son donde los bugs de corrección cuestan dinero y confianza, así que el entrevistador quiere evidencia de que has pensado en las garantías de entrega distribuida. Escuchan si la idempotencia se impone en la base de datos y no con un conjunto en memoria, la verificación de la firma y qué devuelve tu manejador al fallar. Quien ha operado esto en producción suele mencionar los eventos fuera de orden, que es el segundo bug con el que todos se topan.
Cómo estructurar tu respuesta
- Establece que la entrega de webhooks es al menos una vez.
- Describe la idempotencia impuesta por una restricción de unicidad.
- Mete el efecto y el marcador en una misma transacción.
- Explica qué devuelves en caso de éxito y de fallo.
Ejemplo de respuesta
La suposición de la que parto es que el proveedor entregará el mismo evento más de una vez, fuera de orden y a veces con horas de retraso, porque las tres cosas pasan. Así que el manejador verifica primero la firma y la marca de tiempo, y luego inserta el id de evento del proveedor en una tabla processed_events con un índice único. Si esa inserción entra en conflicto, ya lo hemos gestionado, y devuelvo 200 directamente en vez de repetir el trabajo. El detalle importante es que la inserción y el efecto real, conceder la suscripción o registrar el pago, ocurren en la misma transacción, así que un proceso que muera a medias no puede dejar uno sin el otro. Todo lo lento, como enviar un correo de recibo, va a una cola con su propia clave de idempotencia. También guardo la marca de tiempo del evento e ignoro cualquier evento más antiguo que el estado que ya tengo, que es lo que te salva cuando una cancelación llega antes que la mejora que la precedía. Ante fallos devuelvo un 500 a propósito para que el proveedor reintente, y aviso si un evento acaba en la cola de mensajes muertos.
¿Tienes esta entrevista a la vuelta de la esquina? GhostPilot escucha tu llamada en vivo, detecta la pregunta en cuanto la hacen y pone una respuesta estructurada en tu pantalla en tiempo real. Pruébalo en tu próxima entrevista de práctica, o coge un Session Pass de $29, sin suscripción, para la de verdad.
Mira cómo funcionaPreguntas de seguimiento que puedes esperar
- ¿Qué haces cuando los eventos llegan fuera de orden?
- ¿Cómo reproducirías eventos tras arreglar un bug en el manejador?
- ¿Cómo gestionas un mensaje que falla en todos los reintentos?
Más preguntas para Desarrollador full stack
Tu entrevistador hará su propia versión de esta. Pega la descripción real del puesto en el Question Predictor gratuito y obtén las 20 preguntas que ese puesto tiene más probabilidades de hacerte, con lo que cada una busca en realidad.
Predecir mis preguntas