17 de fevereiro de 2024
Entendendo o BFF (Back-for-Front)
No mundo do desenvolvimento de sistemas, é super importante que a comunicação entre o cliente (front-end) e o servidor (back-end) seja fluida e eficiente para garantir que tudo funcione da melhor forma possível para o usuário. É aí que entra o BFF (Back-for-Front), uma camada intermediária que atua como um amigo que facilita essa comunicação entre diferentes instâncias de cliente e serviços. Neste post, vamos mergulhar no que é um BFF, falar sobre por que ele é importante e quando faz ou não sentido usá-lo.
Afinal, o que é um BFF? 🤔
BFF, calma, não significa Best Friends Forever, mas sim Back-for-Front. É basicamente uma camada intermediária que fica no meio do front-end e do back-end. Essa camada é feita sob medida pra ajudar diretamente uma interface específica no front-end, tipo um sistema web ou app mobile. O principal objetivo do BFF é melhorar a comunicação, gerenciar o processamento de dados necessário e, consequentemente, aprimorar a experiência do usuário com o sistema.
A imagem acima representa uma simples interação entre o Front e o BFF, no qual o objetivo é que o front-end interaja apenas com o mediador e não os dois serviços diretamente. Agora, imagine que você está construindo uma aplicação com várias interfaces de usuário (UIs), como um aplicativo web e um móvel. Cada um desses clientes pode exigir dados de forma ligeiramente diferente devido às suas particularidades de design e experiência do usuário. O BFF atua como um intermediário personalizado para cada tipo de cliente, otimizando as chamadas ao back-end e consolidando respostas de múltiplos microsserviços.
Exemplo prático:
Pense em um sistema de blog com três microsserviços: o "Serviço de Gerenciamento de Posts", responsável por criar, editar e excluir postagens; o "Serviço de Comentários", encarregado de gerenciar os comentários associados a cada postagem; e o "Serviço de Estatísticas de Visualização", que fornece informações sobre o número de visualizações de cada postagem. O BFF atua como um intermediário inteligente entre o front-end e esses microsserviços, consolidando as informações obtidas de cada um deles em uma única tela.
Na imagem abaixo é demonstrado um APP mobile que solicita o seu BFF com apenas as informações necessárias para exibição de um Post. Vale considerar que em uma aplicação web com o mesmo propósito, algumas informações podem ser necessárias ou dispensáveis, evidenciando a utilidade do BFF.
Motivações 💪
Especialização de Interface: O BFF permite que as interfaces de usuário recebam dados no formato mais adequado, reduzindo a necessidade de processamento pesado no lado do cliente.
Desacoplamento: Ao introduzir uma camada BFF, o front-end pode ser desenvolvido e evoluir de maneira independente dos serviços de back-end, proporcionando flexibilidade e agilidade no desenvolvimento.
Otimização de Performance: Com o BFF, é possível consolidar várias chamadas de API em uma única chamada, reduzindo a latência e melhorando a experiência do usuário.
Quando ou não usar o BFF 👀
Quando ou não usar essa estratégia arquitetônica?
Quando Usar
Aplicações com Requisitos Específicos de UI: Quando diferentes clientes (web, móvel, etc.) têm requisitos únicos, o BFF pode fornecer a cada um deles os dados da maneira mais otimizada.
Microserviços: Em arquiteturas baseadas em microserviços, o BFF pode simplificar a comunicação entre os serviços e os clientes, atuando como um agregador de serviços.
Evolução Independente: Quando é desejável que equipes de front-end e back-end trabalhem de forma mais autônoma, sem depender diretamente uma da outra para mudanças.
Quando Não Usar o BFF
Aplicações Simples: Para aplicações que não exigem uma lógica complexa entre o front-end e o back-end, introduzir um BFF pode ser desnecessário e aumentar a complexidade.
Recursos Limitados: Implementar e manter um BFF requer recursos adicionais. Em projetos com recursos limitados, avaliar cuidadosamente se os benefícios justificam o investimento adicional.
Por fim, podemos concluir então que o BFF é uma poderosa abordagem arquitetônica que, quando aplicada corretamente, pode significativamente melhorar a comunicação entre o front-end e o back-end, oferecendo uma experiência de usuário mais rica e eficiente. No entanto, como qualquer ferramenta ou técnica, é crucial avaliar cuidadosamente suas necessidades específicas de projeto antes de adotá-la.