Introducción al Error Exceeded Query Complexity en Magento
Con la adopción masiva de GraphQL en Magento 2 (Adobe Commerce), las consultas personalizadas por parte del frontend o aplicaciones móviles se han vuelto comunes. Sin embargo, cuando una petición solicita una cantidad excesiva de datos anidados, el motor de Magento se protege lanzando el error Exceeded query complexity. Esto ocurre porque el sistema cuenta con un límite de seguridad predeterminado para evitar la saturación del servidor y ataques de denegación de servicio (DoS).
Causas Principales de la Excepción
Este problema suele presentarse por dos motivos principales en tu plataforma de comercio electrónico:
- Consultas GraphQL muy anidadas que solicitan múltiples niveles de relaciones (por ejemplo, productos dentro de categorías, que a su vez contienen reseñas y atributos complejos).
- Una configuración predeterminada demasiado restrictiva en el archivo de configuración de GraphQL para el tamaño y complejidad del árbol de consultas.
Método 1: Aumentar el Límite de Complejidad en el Archivo config.xml
La forma más rápida de solucionar este inconveniente si tus consultas son legítimas y necesarias para el funcionamiento del tema o app, es incrementar el umbral máximo permitido mediante código o módulos personalizados.
- Accede a la raíz de tu proyecto Magento mediante SSH.
- Navega hasta el módulo encargado de gestionar GraphQL o crea un módulo custom si lo prefieres.
- Ubica o genera el archivo
etc/config.xmldentro de tu estructura de configuración. - Añade los nodos para sobre escribir el límite de complejidad y profundidad de la consulta, por ejemplo:
<config><default><graphql><query><max_complexity>600</max_complexity><max_depth>20</max_depth></query></graphql></default></config>- Guarda los cambios y limpia la caché ejecutando
bin/magento cache:cleanen tu terminal.
Método 2: Optimizar y Paginación de las Consultas GraphQL en el Frontend
Si no deseas abrir brechas de seguridad aumentando los límites globales del servidor, la solución ideal radica en corregir cómo el cliente solicita los datos.
- Revisa el código frontend (React, Vue, PWA Studio) o la aplicación móvil que realiza la petición GraphQL.
- Elimina campos innecesarios o redundantes que se estén solicitando en una misma llamada.
- Implementa la paginación utilizando los argumentos
pageSizeycurrentPageen lugar de solicitar listas masivas de elementos de una sola vez. - Realiza pruebas de estrés utilizando herramientas como GraphQL Playground para verificar que la complejidad de la consulta se mantenga por debajo del límite seguro.