GraphQL promete resolver o problema de over-fetching e under-fetching do REST, deixando o cliente pedir exatamente o dado que precisa. Na prática, escolho entre os dois olhando pra quem consome a API, não pela tecnologia em si.
Quando escolho REST
Pra maioria das APIs que construo — consumidas por um frontend só, ou por integração simples entre sistemas — REST continua mais simples de documentar, cachear e depurar. É o padrão que já defendo em API-first, porque o contrato fica mais direto de entender.
Quando GraphQL compensa a complexidade extra
Quando múltiplos clientes diferentes (app mobile, painel web, integração de parceiro) consomem a mesma API com necessidades de dado bem diferentes entre si, GraphQL evita criar um endpoint REST especializado pra cada caso. É aí que a flexibilidade de consulta paga o custo de implementar e manter um schema GraphQL.
O erro que vejo times cometerem
Adotar GraphQL num projeto pequeno, com um único frontend, só porque é considerado mais moderno — isso adiciona complexidade de cache e segurança de consulta sem nenhum ganho real. A mesma armadilha de escolher tecnologia pela moda que já apontei em serverless vs. servidor tradicional.



