tRPC em arquiteturas com Front, BFF e API
Onde o tRPC se encaixa bem — e onde ele complica — em arquiteturas com frontend, um BFF dedicado e uma API de domínio separada.
Conteúdo de demonstração. Este artigo existe para testar o layout de análise técnica do Devnático e será substituído por conteúdo definitivo.
O tRPC resolve um problema específico muito bem: comunicação totalmente tipada entre um frontend TypeScript e um backend TypeScript, sem gerar nem manter contratos manualmente. O ponto de atenção é onde essa comunicação acontece na arquitetura.
O cenário comum: Front, BFF e API
Frontend (Next.js) → BFF (tRPC) → API de domínio (NestJS/REST ou gRPC)
Nesse desenho, o BFF existe para agregar chamadas, adaptar formatos e evitar que o frontend converse diretamente com múltiplos serviços de domínio.
Onde a coisa complica
Usar tRPC também entre o BFF e a API de domínio só faz sentido se ambos os serviços forem TypeScript e evoluírem em conjunto. Caso a API de domínio seja poliglota (ou tenha múltiplos tipos de consumidores), um contrato mais explícito — REST com OpenAPI, por exemplo — tende a envelhecer melhor.
Resumo da recomendação
| Comunicação | tRPC é uma boa escolha? |
|---|---|
| Frontend → BFF (mesmo monorepo TS) | Sim, geralmente |
| BFF → API de domínio (TS, evolução conjunta) | Depende do contexto |
| API de domínio → consumidores externos/poliglotas | Normalmente não |
Arquitetura não é sobre usar a ferramenta mais moderna em todo lugar — é sobre escolher o contrato certo para cada fronteira.