Blog

🚀 Rilasciata Gato GraphQL v18.0: caching delle query parsate, sicurezza rafforzata e nuovo provider di traduzione Gemini

Leonardo Losoviz
Di Leonardo Losoviz ·

Gato GraphQL v18.0 è disponibile 🎉

Questa versione è notevolmente più veloce e utilizza considerevolmente meno memoria, ti permette di mettere in cache le query GraphQL parsate su disco per evitare il parsing e la compilazione ripetuti, rafforza i controlli di capability predefiniti per i campi Email Sender, HTTP Client ed Environment Variable, include diverse correzioni di bug e alcuni fix di sicurezza e aggiunge un nuovo provider di traduzione Gemini oltre a timeout configurabili di Request e Connection per le traduzioni.

Continua a leggere per scoprire le novità.

⚡ Mettere in cache su disco le query GraphQL parsate

Ogni richiesta deve effettuare il parsing della query GraphQL, validarla rispetto allo schema e costruire il piano di esecuzione. v18 può ora rendere persistente su disco la query preparata e ricaricarla nelle esecuzioni successive — saltando completamente il lavoro ripetuto di parsing e compilazione.

Abilitalo nella pagina Settings, sotto Server Configuration > Caching > Cache parsed GraphQL queries?:

Abilitazione della cache per le query GraphQL parsate nelle Settings
Abilitazione della cache per le query GraphQL parsate nelle Settings

Questo mette in cache la preparazione della query (parsing e compilazione), non i dati di risposta. Per il caching HTTP delle risposte, consulta Aggiungere il caching HTTP.

I file vengono collocati nella directory di cache del plugin. Se la cartella del plugin non è scrivibile, puoi puntare la cache altrove — consulta Sovrascrivere la cartella di cache.

➡️ Tutti i dettagli in Caching delle query GraphQL parsate.

⚡ Più veloce e più leggero — su tutta la linea

Oltre alla cache delle query parsate, i componenti interni del plugin sono stati rivisti a fondo in v18: ogni richiesta GraphQL è notevolmente più veloce e consuma considerevolmente meno memoria.

I guadagni sono globali — si applicano a ogni query, ogni directive, ogni persisted query — e sono particolarmente evidenti su schemi di grandi dimensioni, query lunghe e siti che eseguono molte richieste GraphQL per pagina (ad es. WordPress headless, API interne).

I siti di grandi dimensioni che in precedenza si scontravano con i limiti di memoria PHP o registravano tempi di risposta lenti dovrebbero percepire una vera differenza, senza bisogno di alcuna modifica di configurazione — basta aggiornare il plugin.

🔒 Impostazioni di sicurezza predefinite rafforzate

Tre aree hanno ricevuto impostazioni predefinite più rigorose affinché il plugin sia più sicuro fin da subito.

Email Sender — Capability richiesta

La mutation _sendEmail può ora essere limitata agli utenti che dispongono di una specifica capability WordPress, configurata sotto Plugin Configuration > Email Sender.

Impostazione della capability richiesta per l'Email Sender
Impostazione della capability richiesta per l'Email Sender

Per impostazione predefinita manage_options, in modo che gli iscritti non possano usare la mutation per inviare spam a destinatari arbitrari. Seleziona (any logged-in user) per disabilitare il controllo.

HTTP Client — Capability richiesta per accedere agli URL interni

Alcuni URL si risolvono in indirizzi interni (127.0.0.1, intervalli link-local, endpoint cloud-metadata, ecc.) che possono esporre servizi interni se raggiunti. Una nuova impostazione sotto Plugin Configuration > HTTP Client limita il targeting di tali indirizzi agli utenti che dispongono di una specifica capability WordPress.

Impostazione della capability richiesta per accedere agli URL interni
Impostazione della capability richiesta per accedere agli URL interni

Per impostazione predefinita manage_options, in modo che gli utenti non-admin non possano raggiungere i servizi interni tramite i campi HTTP Client. Seleziona (any logged-in user) per disabilitare il controllo.

Environment Variables — denylist per gli utenti non-admin

Il campo _env richiedeva già una allow-list esplicita, e tale lista è vuota per impostazione predefinita. v18 aggiunge una rete di sicurezza supplementare per gli utenti non-admin: anche se questi nomi figurano nella allow-list della configurazione, l'accesso viene loro negato.

Sempre negati (segreti 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.

Negati anche — qualsiasi variabile il cui nome contenga: PASSWORD, PASSWD, SECRET, PRIVATE_KEY, API_KEY, APIKEY, ACCESS_KEY, ACCESS_TOKEN, AUTH_TOKEN, BEARER, CREDENTIAL, SALT.

Gli utenti admin continuano ad avere accesso completo.

➡️ Consulta la sezione Security della documentazione per l'elenco completo.

🌐 Traduzione: nuovo provider Gemini

La directive @strTranslate ora supporta Google Gemini come provider di traduzione, accanto a ChatGPT, Claude, DeepL, DeepSeek, Google Translate, Mistral, OpenRouter e gli LLM self-hosted.

Traduci qualsiasi campo String nella lingua desiderata:

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

I seguenti modelli Gemini sono supportati:

  • 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 la tua chiave API Google (tramite Settings, wp-config.php o una variabile d'ambiente), scegli un modello e sei pronto a tradurre.

➡️ Consulta la documentazione di riferimento di Gemini Translation.

⏱️ Traduzione: timeout di Request e Connection

La traduzione di un documento lungo tramite un provider di terze parti può essere lenta, e un upstream bloccato tratterrebbe altrimenti un worker PHP finché PHP stesso non interrompe la richiesta — producendo un generico HTTP 502 / 504 o una pagina bianca "Maximum execution time exceeded".

v18 espone due impostazioni di timeout sotto Plugin Configuration > Translation:

  • Request timeout: tempo massimo (in secondi) di attesa per la risposta completa dal provider di traduzione.
  • Connection timeout: tempo massimo (in secondi) di attesa durante l'instaurazione della connessione.
Impostazione del Request timeout e del Connection timeout per la traduzione
Impostazione del Request timeout e del Connection timeout per la traduzione

Mantieni entrambi i valori leggermente al di sotto del max_execution_time del tuo server, in modo che una traduzione bloccata fallisca in modo pulito con un errore controllato nei log invece di attivare il timeout generico del server. Se le tue traduzioni vanno regolarmente in timeout, aumenta entrambi questi valori e il max_execution_time del tuo server in parallelo.

🐛 Correzioni di bug e fix di sicurezza

Oltre alle nuove funzionalità descritte sopra, v18.0 include anche diverse correzioni di bug e corregge alcune vulnerabilità di sicurezza. Raccomandiamo vivamente di aggiornare a v18 il prima possibile.

Aggiornamento

La versione è in fase di distribuzione ora tramite la directory dei plugin WordPress e la tua dashboard cliente. Aggiorna dalla tua amministrazione WordPress (Plugins → Updates), oppure scarica l'ultima versione dal tuo account.

Consulta il changelog per l'elenco completo delle modifiche.

Buon divertimento con v18! 🎉


Iscriviti alla nostra newsletter

Resta aggiornato su tutte le novità di Gato GraphQL.