Blog

🚀 Lanzado Gato GraphQL v18.0: Caching de consultas parseadas, seguridad reforzada y nuevo proveedor de traducción Gemini


¡Ya está aquí Gato GraphQL v18.0! 🎉

Esta release es notablemente más rápida y usa considerablemente menos memoria, te permite cachear las consultas GraphQL parseadas en disco para evitar el parseo y compilación repetidos, refuerza las comprobaciones de capability por defecto para los campos Email Sender, HTTP Client y Environment Variable, incluye varios bug fixes y algunos parches de seguridad, y añade un nuevo proveedor de traducción Gemini más timeouts configurables de Request y Connection para las traducciones.

Sigue leyendo para conocer las novedades.

⚡ Cachear consultas GraphQL parseadas en disco

Cada petición debe parsear la consulta GraphQL, validarla contra el esquema, y construir el plan de ejecución. v18 ahora puede persistir la consulta preparada en disco y recargarla en ejecuciones posteriores — saltándose por completo el trabajo de parseo y compilación repetidos.

Habilítalo en la página de Settings, en Server Configuration > Caching > Cache parsed GraphQL queries?:

Habilitar caché para consultas GraphQL parseadas en los Settings
Habilitar caché para consultas GraphQL parseadas en los Settings

Esto cachea la preparación de la consulta (parseo y compilación), no los datos de respuesta. Para el HTTP caching de las respuestas, mira Añadiendo caché HTTP.

Los ficheros van en el directorio de caché del plugin. Si la carpeta del plugin no es escribible, puedes apuntar la caché a otro lugar — mira Sobrescribir la carpeta de caché.

➡️ Todos los detalles en Cachear las consultas GraphQL ya parseadas.

⚡ Más rápido y ligero — en todos los niveles

Más allá de la caché de consultas parseadas, los internals del plugin se han revisado a fondo en v18: cada petición GraphQL es notablemente más rápida, y consume considerablemente menos memoria.

Las ganancias son globales — se aplican a cada consulta, cada directiva, cada persisted query — y son especialmente visibles en esquemas grandes, consultas largas, y sitios que ejecutan muchas peticiones GraphQL por página (ej. headless WordPress, APIs internas).

Los sitios grandes que antes topaban con los límites de memoria de PHP o veían tiempos de respuesta lentos deberían notar una diferencia real, sin cambios de configuración necesarios — solo actualiza el plugin.

🔒 Valores por defecto de seguridad reforzados

Tres áreas han recibido valores por defecto más estrictos para que el plugin sea más seguro de fábrica.

Email Sender — Capability requerida

La mutation _sendEmail ahora puede restringirse a usuarios con una capability específica de WordPress, configurada en Plugin Configuration > Email Sender.

Estableciendo la capability requerida para Email Sender
Estableciendo la capability requerida para Email Sender

Por defecto manage_options para que los suscriptores no puedan usar la mutation para hacer spam a destinatarios arbitrarios. Selecciona (any logged-in user) para deshabilitar la comprobación.

HTTP Client — Capability requerida para acceder a URLs internas

Algunas URLs resuelven a direcciones internas (127.0.0.1, rangos link-local, endpoints de cloud-metadata, etc.) que pueden exponer servicios internos si se alcanzan. Un nuevo ajuste en Plugin Configuration > HTTP Client restringe apuntar a esas direcciones a usuarios con una capability específica de WordPress.

Estableciendo la capability requerida para acceder a URLs internas
Estableciendo la capability requerida para acceder a URLs internas

Por defecto manage_options para que los usuarios no-admin no puedan alcanzar servicios internos a través de los campos HTTP Client. Selecciona (any logged-in user) para deshabilitar la comprobación.

Environment Variables — denylist para usuarios no admin

El campo _env ya requería una allow-list explícita, y esa lista está vacía por defecto. v18 añade una red de seguridad adicional para usuarios no admin: aunque estos nombres estén en la allow-list de la configuración, se les deniega el acceso.

Siempre denegados (secrets de WordPress):

AUTH_KEY, SECURE_AUTH_KEY, LOGGED_IN_KEY, NONCE_KEY, AUTH_SALT, SECURE_AUTH_SALT, LOGGED_IN_SALT, NONCE_SALT, DB_NAME, DB_USER, DB_PASSWORD, DB_HOST, DB_CHARSET, DB_COLLATE.

También denegados — cualquier variable cuyo nombre contenga: PASSWORD, PASSWD, SECRET, PRIVATE_KEY, API_KEY, APIKEY, ACCESS_KEY, ACCESS_TOKEN, AUTH_TOKEN, BEARER, CREDENTIAL, SALT.

Los usuarios admin siguen teniendo acceso completo.

➡️ Mira la sección Security de los docs para la lista completa.

🌐 Traducción: nuevo proveedor Gemini

La directiva @strTranslate ahora soporta Google Gemini como proveedor de traducción, junto a ChatGPT, Claude, DeepL, DeepSeek, Google Translate, Mistral, OpenRouter y LLMs auto-alojados.

Traduce cualquier campo String al idioma deseado:

{
  posts {
    title @strTranslate(
      from: "en",
      to: "fr",
      provider: gemini
    )
 
    content @strTranslate(
      from: "en",
      to: "fr",
      provider: gemini
    )
  }
}

Se soportan los siguientes modelos Gemini:

  • Gemini 2.0 Flash (gemini-2.0-flash)
  • Gemini 2.0 Flash-Lite (gemini-2.0-flash-lite)
  • Gemini 2.5 Flash (gemini-2.5-flash)
  • Gemini 2.5 Flash-Lite (gemini-2.5-flash-lite)
  • Gemini 2.5 Pro (gemini-2.5-pro)
  • Gemini 3.1 Flash-Lite (gemini-3.1-flash-lite)

Configura tu API key de Google (vía Settings, wp-config.php, o variable de entorno), elige un modelo, y estás listo para traducir.

➡️ Mira la documentación de referencia de Gemini Translation.

⏱️ Traducción: timeouts de Request y Connection

Traducir un documento largo a través de un proveedor de terceros puede ser lento, y un upstream colgado de otro modo retendría un worker PHP hasta que el propio PHP mate la petición — produciendo un HTTP 502 / 504 genérico o una página en blanco "Maximum execution time exceeded".

v18 expone dos ajustes de timeout en Plugin Configuration > Translation:

  • Request timeout: tiempo máximo (en segundos) a esperar por la respuesta completa del proveedor de traducción.
  • Connection timeout: tiempo máximo (en segundos) a esperar al establecer la conexión.
Estableciendo Request timeout y Connection timeout para traducción
Estableciendo Request timeout y Connection timeout para traducción

Mantén ambos valores ligeramente por debajo del max_execution_time de tu servidor para que una traducción atascada falle limpiamente con un error controlado en los logs en lugar de disparar el timeout genérico del servidor. Si tus traducciones expiran regularmente, aumenta ambos estos valores y el max_execution_time de tu servidor en conjunto.

🐛 Bug fixes y parches de seguridad

Además de las nuevas características anteriores, v18.0 también incluye varios bug fixes y parchea algunas vulnerabilidades de seguridad. Recomendamos encarecidamente actualizar a v18 lo antes posible.

Actualización

La release se está distribuyendo ahora a través del directorio de plugins de WordPress y tu dashboard de cliente. Actualiza desde tu admin de WordPress (Plugins → Updates), o descarga la última versión desde tu cuenta.

Mira el changelog para la lista completa de cambios.

¡Disfruta v18! 🎉


Suscríbete a nuestra newsletter

Mantente al tanto de todas las novedades de Gato GraphQL.