Das Muster Backend for Frontend (BFF) wird angewendet, wenn es notwendig ist, verschiedene APIs oder Schnittstellen für unterschiedliche Clients (z. B. mobile Anwendungen, Webanwendungen, IoT-Geräte) bereitzustellen, um ihre Interaktion mit dem Backend zu optimieren und die interne Komplexität von Microservices zu verbergen. Jeder Client-Typ erhält seinen eigenen BFF-Server, der eine spezialisierte API implementiert, die am besten zu den Bedürfnissen des Clients passt.
Dies ist besonders nützlich bei der Arbeit an großen Systemen — verschiedene BFFs ermöglichen:
Ein Beispiel für eine Architektur auf Node.js:
// Express für BFF const express = require('express'); const axios = require('axios'); const app = express(); app.get('/profile', async (req, res) => { // Aggregation von Daten aus verschiedenen Diensten 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);
Schlüsselmerkmale:
Ist BFF einfach ein Proxy zwischen Clients und Microservices?
Nein. Der Hauptunterschied zwischen BFF und einem gewöhnlichen Proxy ist das Vorhandensein von Geschäftslogik und Datenanpassung. BFF übersetzt und aggregiert Daten, anstatt nur Anfragen weiterzuleiten.
Kann man einen BFF für alle Clients verwenden?
Nein, eines der Prinzipien von BFF ist, einen BFF für jeden Client-Typ zu definieren. Wenn man einen einzigen BFF verwendet, verlieren sich die Vorteile der optimalen Anpassung an verschiedene Schnittstellen und Gerätetypen.
Erhöht BFF die schwache Kopplung zwischen den Teams?
Oft wird mit "ja" geantwortet, aber das ist nicht so: Die Einführung von BFF verstärkt oft die Kopplung, da die Unterstützung von BFF eine gemeinsame Arbeit der Frontend- und Backend-Teams erfordert, was eine Koordination von Änderungen erforderlich macht.