El patrón Backend for Frontend (BFF) se aplica cuando es necesario proporcionar diferentes API o interfaces para diferentes clientes (como aplicaciones móviles, aplicaciones web, dispositivos IoT) para optimizar su interacción con el backend y ocultar la complejidad interna de los microservicios. Cada tipo de cliente obtiene su propio servidor BFF, que implementa una API especializada, adecuada para las necesidades del cliente.
Esto es conveniente al trabajar en sistemas grandes: diferentes BFF permiten:
Ejemplo de arquitectura en Node.js:
// Express para BFF const express = require('express'); const axios = require('axios'); const app = express(); app.get('/profile', async (req, res) => { // Agregación de datos de diferentes servicios const [user, settings] = await Promise.all([ axios.get('http://user-service/api/user'), axios.get('http://settings-service/api/settings') ]); res.json({ name: user.data.name, theme: settings.data.theme }); }); app.listen(3000);
Características clave:
¿BFF es solo un proxy entre los clientes y los microservicios?
No. La principal diferencia entre BFF y un proxy normal es la presencia de lógica empresarial y adaptación de datos. BFF traduce y agrega datos, no solo redirige solicitudes.
¿Se puede utilizar un solo BFF para todos los clientes?
No, uno de los principios de BFF es asignar un BFF para cada tipo de cliente. Si se usa un BFF único, se pierden los significados de la configuración óptima para diferentes interfaces y tipos de dispositivos.
¿BFF aumenta la baja cohesión entre equipos?
A menudo responden "sí", pero no es así: la adición de BFF a menudo refuerza la cohesión, ya que el mantenimiento de BFF requiere un trabajo conjunto de los equipos de frontend y backend, lo que requiere coordinación de cambios.