GraphQL y REST: comparar necesidades, costes y permisos

En resumen

GraphQL permite seleccionar campos de un esquema tipado y puede complementar REST. Ninguno es siempre más rápido o seguro para cualquier carga.

Pasillo seguro de servidores y redes sin personal Ilustración · escena ficticia
En este artículo

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