BFF
Uma camada que adapta o backend às necessidades do frontend, agregando e transformando dados para melhorar a experiência do cliente.
O que é um BFF?
BFF significa Backend for Frontend. É uma camada intermediária pensada para servir a um canal ou interface específica, como uma SPA web, um app mobile ou um portal administrativo.
Seu trabalho não é substituir os microsserviços, mas traduzir a complexidade deles em respostas mais úteis para a UI.
Que problema resolve?
Imagine um frontend que precisa de:
- dados do usuário
- dados de pedidos
- dados de produtos recomendados
- métricas ou estado adicional
Sem um BFF, o cliente poderia ser obrigado a:
- chamar vários serviços
- entender formatos diferentes
- combinar respostas
- lidar com erros distribuídos
- se acoplar a detalhes internos
O BFF reduz essa complexidade.
Responsabilidades principais
Agregação de dados
Combinar informações de vários serviços em uma única resposta.
Transformação em DTOs de UI
Entregar os dados em um formato útil para telas específicas.
Otimização de payload
Reduzir chamadas desnecessárias e simplificar respostas.
Caching de leitura
Guardar respostas frequentes para melhorar a latência e reduzir a carga.
Orquestração simples
Coordenar chamadas entre serviços quando o frontend precisa de uma visão composta.
O que não deveria fazer
Não deveria conter a lógica central do negócio
Pode coordenar e transformar, mas não se tornar a camada onde vive o domínio.
Não deveria substituir os microsserviços
Os serviços continuam sendo responsáveis pelas regras de negócio.
Não deveria crescer sem controle
Um BFF mal governado pode acabar se tornando um “backend monolítico para a UI”.
Quando agrega mais valor
O BFF é especialmente útil quando:
- o frontend precisa de dados de vários serviços
- há otimização específica por canal
- você quer evitar múltiplas requisições a partir do cliente
- você precisa de DTOs pensados para a UI
- você tem vários canais com necessidades distintas
BFF único vs múltiplos BFFs
Em alguns sistemas basta um único BFF. Em outros, pode fazer sentido separar:
- BFF web
- BFF mobile
- BFF admin
A decisão depende de quão diferentes são as necessidades de cada canal.
REST ou GraphQL
Um BFF pode ser implementado com:
- REST
- GraphQL
- combinação de ambos
O GraphQL costuma ser atraente quando há agregação complexa e a necessidade de controlar exatamente quais campos a UI consome. O REST pode ser suficiente e mais simples em muitos contextos.
Exemplo prático
Suponha a tela inicial de um e-commerce.
A UI precisa de:
- perfil do usuário
- pedidos recentes
- produtos recomendados
O BFF pode:
- Consultar
ms-users - Consultar
ms-orders - Consultar
ms-products - Combinar os resultados
- Retornar um DTO pronto para renderizar
Assim o frontend faz uma única chamada e recebe uma resposta adaptada à sua necessidade.
Resumo
O BFF existe para adaptar o backend ao frontend. Seu valor está em simplificar a UI, agregar respostas e reduzir o acoplamento, não em absorver a lógica principal do domínio.