Em resumo, é um padrão para API de back-end servindo ao front-end. Atualmente a experiência na web considerando desde navegadores web até dispositivos móveis – com pequenas telas, planos de dados limitados e limites de requisições – oferece um desafio em como fornecer uma boa experiência ao usuário. Considerando que um dispositivo móvel necessita de menos dados e algumas vezes esses são de tipos diferentes, por exemplo. Isso sem falar em interações adicionais, como leitor de código de barras, câmera, etc.
Para essa e outras necessidades, existe um padrão de APIs de back-end que tratam essa diferença entre dispositivos com outros tipos de experiência com o usuário chamado Back-end For Front-end (BFF).
O BFF está fortemente associado a uma experiência específica do usuário, facilitando a definição e adaptação da API conforme a interface, facilitando o isolamento de responsabilidades entre back-end e front-end.
Uma grande vantagem em ter um BFF na sua aplicação é não precisar se preocupar em como atender todas as requisições e necessidades do Front-end. A partir desse momento isso se torna responsabilidade do BFF, que por sua vez irá conversar com esses serviços (a comunicação entre serviços Back-end é extremamente mais performática do que realizar essas chamadas pelo browser) e irá fornecer todos os dados para a interface através de uma única requisição entre cliente e servidor.
Isso vai depender da solução proposta, por exemplo, APPs Android e IOS podem ter diferenças o suficiente para justificar essa abordagem. Uma das preocupações de ter múltiplos BFFs (um por interface do usuário) que você pode acabar com muita duplicação entre eles.
Uma das características da BFF é isolar responsabilidades. A implementação desse padrão auxilia o desenvolvimento na criação de uma arquitetura baseada em microsserviço. Assim, as novas implementações passam pelo BFF, que só então comunicam com o novo microsserviço ou o monólito. Sempre que funcionalidades são extraídas do monólito, o BFF é alterado, enquanto o código da aplicação permance o mesmo. A eliminação das chamadas diretas dos consumidores para a API do monólito, simplifica o processo de migração.
Criar um BFF pode ser mais simples do que se imagina. Uma simples solução utilizando NodeJs, por exemplo, pode resolver essa necessidade, veja:
O trecho de código acima demonstra como é simples e rápido iniciar um BFF, criando um servidor com NodeJs utilizando o Express.
Criei um BFF para exemplificar esse artigo, simulando um cenário onde temos alguns serviços de usuários, produtos e pedidos. Imagine quantas adaptações são necessárias a nível de interface para esses serviços. Por exemplo, formatar endereços, telefones, valores, múltiplas requisições entre cliente e servidor, diferentes tipos de interfaces, entre outras atividades. Essa aplicação encontra-se no github abaixo:
https://github.com/gustavobicalho/bff
2025 TQI - Todos os direitos reservados