entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

Como puedo administrar transaccionalidad entre API's distribuidas

Hola!

En nuestro grupo de trabajo hemos implementado 2 APIs y entre ellas se comunican para completar un servicio. Cada una de estas APIs persiste información en su propia base de datos.
Lo que vemos es que cuando una le solicita a la otra realizar cierta acción, si esta última se demora en hacerlo, la primera corta por timeout y asume que hubo un error y así se lo comunica al usuario; no obstante, la otra API completa el pedido y persiste la información en su base de datos. Quedando de esta manera información inconsistente.
¿Alguien sabe si existe alguna forma de manejar transaccionalidad entre las APIs para que se haga commit si toda la operación fue un éxito?
Agradezco la ayuda que me puedan brindar.
Saludos.

1 Respuesta

0voto

Leonardo-Tadei Puntos227320

Hola @njortiz,

Dado que si no entiendo mal tu planteo, las APIs no conviven en el mismo servidor, con lo que no podés implementar un sistema de señalización interno, sumado a que posiblemente las estés usando en un entorno web, con lo que no tenés el concepto de "conexión" por ser el HTTP un protocolo stateless, manejar transacciones es algo que tendrás que implementar vos en la propia API.

Una forma de manejarla podría ser que la API que recibe la acción se quede esperando una especie de ACK del otro lado, y si este no llega, hacer un rollback de la operación.

Con una implementación así, al dar la llamada timeout, se lo comunica al usuario igual que ahora, pero del otro lado se disparará un rollback dejando las cosas consistentes.

Si en cambio la operación resulta bien y se devuelve el ACK, esta queda persistida porque no se dispara el rollback.

Tenés que ampliar ambas APIs para soportar un mecanismo así y además tendrás más tráfico (por los envíos de ACK), pero tendrías muchas menos inconsistencias entre lo que se expone al usuario y lo que pasa realmente.

Saludos cordiales!

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta