GraphQL vs tRPC: schema-first ou TypeScript?
GraphQL é uma camada de query baseada em schema e agnóstica de linguagem; tRPC oferece type safety TypeScript end-to-end entre cliente e servidor sem schema ou codegen.
GraphQL define um schema tipado que qualquer cliente ou linguagem pode consumir, com queries flexíveis e um ecossistema rico, adequando-se a APIs públicas e clientes poliglotas. tRPC é apenas TypeScript: procedures do servidor são importadas como chamadas de cliente totalmente tipadas, eliminando schemas e codegen para apps full-stack TS, mas apenas dentro do mundo TS. GraphQL favorece flexibilidade e interoperabilidade; tRPC favorece type safety sem atrito em monorepos TS.
| GraphQL | tRPC | |
|---|---|---|
| Linguagens | Qualquer | Somente TypeScript |
| Schema | Explícito, tipado | Inferido do código |
| Codegen | Frequentemente necessário | Nenhum |
| Clientes | Poliglota, público | Full-stack TS |
| Melhor para | Clientes públicos/variados | Monorepos TS |
Caso de uso e type safety
GraphQL se adequa a APIs públicas, mobile e consumidores poliglotas que precisam de um contrato formal. tRPC se adequa a apps full-stack TypeScript (frequentemente Next.js) onde cliente e servidor compartilham tipos diretamente, dando segurança end-to-end instantânea sem um schema, mas não consegue servir consumidores não-TS ou externos com a mesma limpeza.
Em CI
Pipelines de GraphQL validam o schema e rodam codegen de cliente. tRPC depende do compilador TypeScript, então o type-check é o gate principal. Ambos rodam em runners gerenciados, onde runners mais rápidos encurtam as etapas de type-check e codegen.
O veredito
APIs públicas ou clientes poliglotas que precisam de um contrato formal e flexível: GraphQL. Apps full-stack TypeScript internos que querem type safety end-to-end sem atrito: tRPC. tRPC é excelente dentro de um monorepo TS; GraphQL é a escolha quando consumidores externos ou não-TS importam.