Le modèle Backend for Frontend (BFF) est utilisé lorsque différentes API ou interfaces doivent être fournies pour divers clients (par exemple, une application mobile, une application Web, des appareils IoT), afin d'optimiser leur interaction avec le backend et de camoufler la complexité interne des microservices. Chaque type de client dispose de son propre serveur BFF, qui met en œuvre une API spécialisée, adaptée au mieux aux besoins du client.
C'est pratique lors de la conception de systèmes complexes — différents BFF permettent :
Exemple d'architecture en Node.js :
// Express pour BFF const express = require('express'); const axios = require('axios'); const app = express(); app.get('/profile', async (req, res) => { // Agrégation de données provenant de différents services 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);
Caractéristiques clés :
Le BFF est-il juste un proxy entre les clients et les microservices ?
Non. La principale différence entre le BFF et un proxy ordinaire est la présence de logique métier et d'adaptation des données. Le BFF traduit et agrège les données, au lieu de simplement rediriger les requêtes.
Peut-on utiliser un seul BFF pour tous les clients ?
Non, l'un des principes du BFF est de créer un BFF pour chaque type de client. Si l'on utilise un BFF unique, on perd l'optimisation appropriée pour différentes interfaces et types d'appareils.
Le BFF augmente-t-il la faible couplage entre les équipes ?
Il est souvent répondu "oui", mais ce n'est pas le cas : l'ajout d'un BFF renforce généralement le couplage, car le soutien du BFF nécessite un travail commun des équipes frontend et backend, ce qui exige de coordonner les changements.