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:

  1. Consultar ms-users
  2. Consultar ms-orders
  3. Consultar ms-products
  4. Combinar os resultados
  5. 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.