Wzorzec Backend for Frontend (BFF) jest stosowany, gdy należy dostarczyć różne API lub interfejsy dla różnych klientów (np. aplikacji mobilnej, aplikacji internetowej, urządzeń IoT), aby zoptymalizować ich interakcję z backendem i ukryć wewnętrzną złożoność mikroserwisów. Każdy typ klienta otrzymuje swój własny serwer BFF, który implementuje wyspecjalizowane API, najlepiej dopasowane do potrzeb klienta.
Jest to wygodne przy pracy nad dużymi systemami — różne BFF pozwalają:
Przykład architektury w Node.js:
// Express dla BFF const express = require('express'); const axios = require('axios'); const app = express(); app.get('/profile', async (req, res) => { // Agregacja danych z różnych usług 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);
Kluczowe cechy:
BFF to po prostu proxy pomiędzy klientami a mikroserwisami?
Nie. Główna różnica między BFF a zwykłym proxy polega na obecności logiki biznesowej i adaptacji danych. BFF translatuje i agreguje dane, a nie tylko przekierowuje żądania.
Czy można używać jednego BFF dla wszystkich klientów?
Nie, jednym z zasad BFF jest przydzielenie BFF dla każdego typu klienta. Używając jednego BFF, tracą sens optymalne dostosowania do różnych interfejsów i typów urządzeń.
BFF zwiększa słabą powiązanie pomiędzy zespołami?
Często odpowiadają „tak”, ale to nieprawda: dodanie BFF zazwyczaj wzmacnia powiązanie, ponieważ wsparcie BFF wymaga współpracy zespołów frontendowych i backendowych, co wymaga koordynacji zmian.