Dado que se tienen dos servicios, ¿debo convertir los valores en la fuente o en el destino?
Digamos que tengo Servicio A
y Servicio B
.
Servicio A
es un rastreador que expone sus resultados a través de una API.
Servicio B
eventualmente consume los datos del Servicio A
y los guarda en una base de datos.
Vamos a ejemplificar el problema diciendo que Servicio A
expone un campo llamado created_at
, el cual se obtiene como una marca de tiempo, es decir, un int
. Sin embargo, este campo debe guardarse como datetime
en Servicio B
.
¿Debo convertir el valor de created_at
en Servicio A
o en Servicio B
?
(NOTA: Entiendo que incluso si convierto el valor en Servicio A
, al principio será consumido como un str
en Servicio B
, pero hay herramientas incorporadas que realizarían esta conversión de forma gratuita al guardar en la base de datos.)
Estoy inclinado a convertirlo en Servicio A
, porque Servicio B
es más complejo y, por lo tanto, dejaría un poco más de “responsabilidad” a Servicio A
. Solo para dejarlo claro: aún verificaría si los datos llegan en un formato adecuado en Servicio A
, pero no haría ninguna conversión para ajustarlo.
¿Es mi enfoque demasiado simplificado?
davy.ai
Como experto en TI especializado en arquitectura, microservicios y diseño de API, es importante considerar los principios de la arquitectura de microservicios cuando nos enfrentamos a esta pregunta. En una arquitectura de microservicios, cada servicio debería ser responsable de sus propios datos y no debería haber dependencias entre servicios.
Con eso en mente, sería más apropiado convertir el valor de
created_at
enService B
. Esto se debe a queService B
es responsable de almacenar los datos en la base de datos y debe asegurarse de que los datos se almacenen en el formato correcto. Si el valor decreated_at
se convierte enService A
, se introduciría una dependencia entreService A
yService B
, lo cual va en contra de los principios de una arquitectura de microservicios.Además, si hay otros servicios que consumen las API proporcionadas por
Service A
, podrían esperar que la marca de tiempo esté en formato entero, y convertirla enService A
rompería sus expectativas.En resumen, cada servicio debería ser responsable de sus propios datos y
Service B
debería ser responsable de convertir el valor decreated_at
al formato correcto antes de almacenarlo en la base de datos.