El patrón de Composición de API se utiliza cuando es necesario agregar datos para el frontend o un servicio externo desde diferentes microservicios. Esto se realiza a través de una capa de coordinación (API Composer), que recoge los datos necesarios mediante consultas individuales a los servicios requeridos y genera la respuesta final.
A menudo, esta capa se implementa como un servicio separado, Gateway o BFF (Backend For Frontend), que proporciona agregación, transformación y manejo de errores. Esta solución reduce las llamadas de red innecesarias y aísla a los clientes de los cambios en las API internas.
Ejemplo de código (en Node.js + Express):
const axios = require('axios'); app.get('/user-details/:id', async (req, res) => { const user = await axios.get(`http://usersvc/user/${req.params.id}`); const orders = await axios.get(`http://ordersvc/orders/user/${req.params.id}`); res.json({ user: user.data, orders: orders.data }); });
Características clave:
¿Es siempre la composición de API el mejor método para combinar datos de microservicios?
No, con un gran número de entidades relacionadas y conexiones lentas, el rendimiento puede verse afectado. En algunos casos, es mejor utilizar CQRS o servicios de Agregación de Datos.
¿Se puede acceder directamente desde el frontend a cada microservicio?
En sistemas pequeños es posible, pero a medida que el sistema crece surgen problemas de seguridad, gestión de esquemas, escalabilidad y sobrecarga de lógica de agregación en el frontend. Por lo tanto, una capa de agregación centralizada es preferible.
¿Asegura la composición de API la integridad transaccional entre servicios?
No. Este patrón solo agrega datos para la consulta. La transaccionalidad debe implementarse a través de sagas o mecanismos de eventos.