Oscar Kemuel

Voltar para o blog
Foto do autor Oscar Kemuel
Oscar Kemuel@oscar.kemuel

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.

Esta imagem ilustra a arquitetura de uma aplicação web e móvel. Está dividida em duas partes principais: o front-end e o back-end. O front-end inclui interfaces móveis e web. O back-end é composto por serviços BFF (Backend for Frontend) para mobile e web, que se conectam a três diferentes serviços de back-end (Serviço 01, Serviço 02 e Serviço 03). A interface móvel se conecta ao BFF Mobile, que então se comunica com os serviços de back-end. Da mesma forma, o front-end web se conecta ao BFF Web, que também se comunica com os mesmos serviços de back-end.

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.

Esta imagem mostra a arquitetura de um aplicativo móvel interagindo com serviços de backend. No lado esquerdo, há uma interface de aplicativo móvel exibindo uma postagem com título e comentários. O aplicativo faz uma requisição para /post/:id ao BFF Mobile (Backend for Frontend), que então se comunica com três diferentes serviços de backend: Serviço de Visualizações, Serviço de Postagens e Serviço de Comentários. Cada serviço é responsável por lidar com diferentes aspectos da postagem.

Motivações 💪

  1. 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.

  2. 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.

  3. 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

  1. 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.

  2. 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.

  3. 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

  1. 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.

  2. 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.