El patró Backend-for-Frontend (conegut habitualment per les seves sigles BFF) és un patró de disseny arquitectònic de programari, variant de l'arquitectura de microserveis, on es crea un servei de backend específic per a cada tipus de client o interfície d'usuari (UI). En lloc de tenir un únic punt d'entrada general per a tots els clients, el sistema disposa d'un backend optimitzat, per exemple, per a aplicacions mòbils (iOS/Android) i un altre per a navegadors web o aplicacions d'escriptori.
Motivació i problemes resolts En les arquitectures de microserveis pures, les interfícies d'usuari sovint han de recuperar dades de múltiples serveis independents per a construir una sola pantalla. Si el client realitza aquestes crides directament a través d'Internet, es produeixen dos problemes principals: Alta latència de xarxa: Múltiples crides a través de xarxes potencialment lentes (com les mòbils) degraden l'experiència d'usuari. Duplicació de lògica: Els diferents clients (iOS, Android, Web) han de replicar la complexa lògica d'agregació de dades i gestió de fallades de forma independent.
El BFF com a agregador i orquestrador La funció principal que realitza el servei BFF és l'agregador de serveis. La seva responsabilitat és realitzar múltiples crides concurrents als diversos microserveis interns (com inventari, favorits o productes), recollir les respostes i combinar-les en un únic objecte de dades optimitzat per a les necessitats del client final .
En entorns de programació asíncrona, com els basats en la biblioteca `asyncio` de Python, el BFF és extremadament eficient, ja que pot llançar totes les peticions als serveis secundaris simultàniament mitjançant funcions com `asyncio.wait` o `asyncio.gather`. El BFF també gestiona les dependències de dades: per exemple, pot demanar dades de productes i favorits alhora, però ha d'esperar a rebre els IDs de producte abans de consultar el servei d'inventari .
Estratègies de resiliència Un avantatge crític del BFF és la centralització de la gestió d'errors distribuïts mitjançant diversos patrons: Degradació controlada: El BFF classifica els serveis en "crítics" i "opcionals". Si un servei opcional (com el de favorits) falla o triga massa, el BFF retorna un valor nul (`null`) però permet que la pàgina principal es carregui amb la resta d'informació. Reintents (Retries): El BFF pot intentar automàticament tornar a realitzar una petició si l'error és transitori. Patró de tallacircuit (Circuit Breaker): Evita que el BFF continuï fent crides a un servei que se sap que està fallant o saturat, retornant un error immediat ("fail-fast") per estalviar recursos i evitar esperes inútils a l'usuari.
Avantatges Optimització del trànsit: Permet enviar només els camps de dades que el dispositiu necessita, estalviant bateria i amplada de banda en mòbils. Seguretat: Actua com una capa addicional que oculta detalls interns de l'arquitectura de microserveis. Independència d'equips: Els equips de frontend poden definir el seu propi model de dades sense dependre de canvis en els serveis de backend generals.
Referències
Fowler, M. (2022). Python Concurrency with asyncio. Manning Publications. Capítol 10. Campus Virtual UPC. Glossari de l'assignatura Processament de Dades i Comunicació.