Il pattern Backend for Frontend (BFF) viene utilizzato quando è necessario fornire diverse API o interfacce per diversi client (ad esempio, applicazioni mobili, applicazioni web, dispositivi IoT), al fine di ottimizzare la loro interazione con il backend e nascondere la complessità interna dei microservizi. Ogni tipo di client riceve il proprio server BFF, che implementa un'API specializzata, la quale si adatta meglio alle esigenze del client.
Questo è utile quando si lavora su sistemi complessi: diversi BFF permettono di:
Esempio di architettura in Node.js:
// Express per BFF const express = require('express'); const axios = require('axios'); const app = express(); app.get('/profile', async (req, res) => { // Aggregazione dei dati da diversi servizi 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);
Caratteristiche principali:
BFF è semplicemente un proxy tra client e microservizi?
No. La principale differenza tra BFF e un normale proxy è la presenza di logica di business e adattamento dei dati. BFF trasmette e aggrega i dati, non si limita a inoltrare le richieste.
È possibile utilizzare un unico BFF per tutti i client?
No, uno dei principi del BFF è quello di riservare un BFF per ogni tipo di client. Se si utilizza un BFF unificato, si perde il significato di un'ottimale configurazione per diverse interfacce e tipi di dispositivi.
BFF aumenta la scarsa coesione tra i team?
Spesso si risponde "sì", ma non è così: l'aggiunta di BFF spesso aumenta la coesione, poiché mantenere un BFF richiede un lavoro congiunto tra i team frontend e backend, il che richiede coordinamento nelle modifiche.