Compreender o pedido e o custo
O exemplo usa um esquema fictício: customer, orders e total têm de existir na API real. Um pedido pode gerar várias leituras no servidor. REST também pode fornecer respostas adaptadas. Um único endpoint HTTP é habitual em GraphQL, mas não obrigatório em toda a arquitetura.
query RecentOrders($id: ID!) {
customer(id: $id) {
name
orders(first: 5) {
nodes { id total }
}
}
}Comparar uma tarefa representativa
- Meça bytes, latência, erros e trabalho do servidor para o mesmo ecrã, permissões e volumes realistas.
- Verifique paginação, leituras agrupadas contra N+1, cache e isolamento entre contas.
- Avalie evolução do esquema, compatibilidade com clientes antigos e operação. Manter REST pode ser mais simples.
Aplicar permissões e limites
Autentique os pedidos e autorize objetos e campos na lógica de negócio. Limite listas, profundidade, aliases, operações agrupadas e custo estimado. A frequência dos pedidos não descreve toda a carga. Ocultar introspeção não substitui estes controlos; teste recusas e respostas parciais.
Fontes primárias
Controle o esquema GraphQL e o custo da consulta.
O GraphQL permite que os clientes selecionem campos, mas essa flexibilidade exige autorização de objetos e campos. Um limite de tamanho ou profundidade, por si só, não substitui a medição do trabalho que uma consulta causa.
- Teste campos e objetos confidenciais pertencentes a outra conta.
- Limite e observe o custo, a profundidade e o volume de solicitações para o serviço.
- Verifique as alterações de esquema de versão e exercite clientes mais antigos.
Fonte primária: OWASP — GraphQL Cheat Sheet. Método relacionado: consultar o guia prático.
ETag, cache HTTP e alterações concorrentes
As notas detalhadas desta edição estão disponíveis em inglês.
REST and GraphQL: separate representation and authorisation
An HTTP ETag applies to a selected representation. It is neither permission for every returned object nor a universal consistency contract for GraphQL entities.
- Define which response variants have their own validators.
- Test object and field access independently from HTTP conditions.
- Do not automatically apply the PUT scenario to a GraphQL mutation; specify its concurrency contract.
Explore ETag comparisons and the simulator →
References reviewed · RFC 9110 · §13 · RFC 9111 · RFC 6585 · §3
