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.
Otimizando sua aplicação
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.
Podemos ter apenas um ou vários BFFs?
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.
BFF e Refatoração, faz sentido?
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.
E na prática, como funciona?
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