Comprender la consulta y su coste
El ejemplo utiliza un esquema ficticio: customer, orders y total deben existir en la API real. Una consulta puede generar varias lecturas en el servidor. REST también admite respuestas adaptadas. Un único punto HTTP es habitual en GraphQL, pero no obligatorio en toda arquitectura.
query RecentOrders($id: ID!) {
customer(id: $id) {
name
orders(first: 5) {
nodes { id total }
}
}
}Comparar una tarea representativa
- Mide bytes, latencia, errores y trabajo del servidor para la misma pantalla, permisos y volúmenes realistas.
- Revisa paginación, lecturas agrupadas para limitar N+1, caché y aislamiento entre cuentas.
- Evalúa evolución del esquema, compatibilidad de clientes antiguos y operación. Mantener REST puede ser más sencillo.
Aplicar permisos y límites
Autentica las solicitudes y autoriza objetos y campos en la lógica de negocio. Limita listas, profundidad, alias, operaciones agrupadas y coste estimado. La frecuencia por sí sola no describe la carga. Ocultar introspección no sustituye estos controles; prueba accesos denegados y respuestas parciales.
Fuentes primarias
Gestione el esquema GraphQL y el coste de las consultas.
GraphQL permite a los clientes seleccionar campos, pero esta flexibilidad requiere autorización de objetos y campos. Un límite de tamaño o profundidad por sí solo no sustituye la medición del trabajo que genera una consulta.
- Pruebe los campos confidenciales y los objetos propiedad de otra cuenta.
- Limite y supervise el coste, la profundidad y el volumen de solicitudes del servicio.
- Gestione las versiones de los cambios de esquema y pruebe con clientes antiguos.
Fuente primaria: OWASP — GraphQL Cheat Sheet. Método relacionado: consultar la guía práctica.
ETag, caché HTTP y actualizaciones concurrentes
Las notas detalladas de esta edición están disponibles en 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
