GraphQL was never wrong. REST was never obsolete. tRPC is not the final answer either. Each one solves a different coordination problem, and the right choice depends more on team boundaries and consumers than on style preference.
What Each Approach Optimizes For
REST is strong when compatibility and HTTP semantics matter. It works well for public APIs, third-party consumers, and systems where the transport contract should stay language-agnostic.
GraphQL is strong when many clients need flexible reads against a shared schema. It centralizes the contract and gives clients control over shape, which is valuable when frontend needs vary.
tRPC is strongest when one TypeScript team owns both ends and wants fast type-safe iteration: