Capire richiesta e costo
L’esempio usa uno schema fittizio: customer, orders e total devono esistere nell’API reale. Una richiesta può generare più letture sul server. Anche REST può offrire risposte mirate. Un singolo endpoint HTTP è comune con GraphQL, ma non obbligatorio per ogni architettura.
query RecentOrders($id: ID!) {
customer(id: $id) {
name
orders(first: 5) {
nodes { id total }
}
}
}Confrontare un’attività rappresentativa
- Misura byte, latenza, errori e lavoro del server per la stessa schermata, permessi e volumi realistici.
- Verifica paginazione, letture raggruppate contro N+1, cache e isolamento tra account.
- Valuta evoluzione dello schema, compatibilità dei client precedenti e gestione operativa. Conservare REST può essere più semplice.
Applicare diritti e limiti
Autentica le richieste e autorizza oggetti e campi nella logica di business. Limita liste, profondità, alias, operazioni raggruppate e costo stimato. La sola frequenza delle richieste non descrive il carico. Nascondere l’introspezione non sostituisce questi controlli; prova anche rifiuti e risposte parziali.
Fonti primarie
Gestire lo schema GraphQL e il costo delle query.
GraphQL consente ai client di selezionare i campi, ma questa flessibilità richiede l'autorizzazione di oggetti e campi. Un limite di dimensione o profondità da solo non sostituisce la misurazione del lavoro causato da una query.
- Testare i campi sensibili e gli oggetti di proprietà di un altro account.
- Limitare e monitorare costi, profondità e volume delle richieste per il servizio.
- Gestire le modifiche allo schema di versione e testare i client meno recenti.
Fonte primaria: OWASP — GraphQL Cheat Sheet. Metodo correlato: consultare la guida pratica.
ETag, cache HTTP e modifiche concorrenti
Le note dettagliate di questa edizione sono disponibili in inglese.
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
