Blog

🚀 Lancement de Gato GraphQL v18.0 : Mise en cache des requĂȘtes parsĂ©es, sĂ©curitĂ© renforcĂ©e et nouveau fournisseur de traduction Gemini

Leonardo Losoviz
Par Leonardo Losoviz ·

Gato GraphQL v18.0 est disponible 🎉

Cette version est notablement plus rapide et utilise considĂ©rablement moins de mĂ©moire, vous permet de mettre en cache les requĂȘtes GraphQL parsĂ©es sur disque pour Ă©viter le parsage et la compilation rĂ©pĂ©tĂ©s, renforce les vĂ©rifications de capacitĂ© par dĂ©faut pour les champs Email Sender, HTTP Client et Environment Variable, inclut plusieurs corrections de bugs et quelques correctifs de sĂ©curitĂ©, et ajoute un nouveau fournisseur de traduction Gemini ainsi que des dĂ©lais configurables de Request et Connection pour les traductions.

Lisez la suite pour découvrir les nouveautés.

⚡ Mettre en cache les requĂȘtes GraphQL parsĂ©es sur disque

Chaque requĂȘte doit parser la requĂȘte GraphQL, la valider par rapport au schĂ©ma et construire le plan d'exĂ©cution. v18 peut dĂ©sormais persister la requĂȘte prĂ©parĂ©e sur disque et la recharger lors des exĂ©cutions ultĂ©rieures — en sautant entiĂšrement le travail rĂ©pĂ©tĂ© de parsage et de compilation.

Activez-le sur la page Settings, sous Server Configuration > Caching > Cache parsed GraphQL queries? :

Activation du cache pour les requĂȘtes GraphQL parsĂ©es dans les Settings
Activation du cache pour les requĂȘtes GraphQL parsĂ©es dans les Settings

Cela met en cache la prĂ©paration de la requĂȘte (parsage et compilation), pas les donnĂ©es de rĂ©ponse. Pour la mise en cache HTTP des rĂ©ponses, consultez Ajout de la mise en cache HTTP.

Les fichiers sont placĂ©s dans le rĂ©pertoire de cache du plugin. Si le dossier du plugin n'est pas accessible en Ă©criture, vous pouvez pointer le cache ailleurs — consultez Remplacement du dossier de cache.

âžĄïž Tous les dĂ©tails dans Mise en cache des requĂȘtes GraphQL parsĂ©es.

⚡ Plus rapide et plus lĂ©ger — Ă  tous les niveaux

Au-delĂ  du cache des requĂȘtes parsĂ©es, les composants internes du plugin ont Ă©tĂ© revus en profondeur dans v18 : chaque requĂȘte GraphQL est notablement plus rapide et consomme considĂ©rablement moins de mĂ©moire.

Les gains sont globaux — ils s'appliquent Ă  chaque requĂȘte, chaque directive, chaque persisted query — et ils sont particuliĂšrement visibles sur les grands schĂ©mas, les longues requĂȘtes, et les sites qui exĂ©cutent de nombreuses requĂȘtes GraphQL par page (p. ex. WordPress headless, APIs internes).

Les grands sites qui se heurtaient auparavant aux limites mĂ©moire PHP ou constataient des temps de rĂ©ponse lents devraient ressentir une vraie diffĂ©rence, sans aucun changement de configuration requis — il suffit de mettre Ă  jour le plugin.

🔒 Valeurs par dĂ©faut de sĂ©curitĂ© renforcĂ©es

Trois domaines ont reçu des valeurs par défaut plus strictes afin que le plugin soit plus sûr d'emblée.

Email Sender — CapacitĂ© requise

La mutation _sendEmail peut dĂ©sormais ĂȘtre restreinte aux utilisateurs disposant d'une capacitĂ© WordPress spĂ©cifique, configurĂ©e sous Plugin Configuration > Email Sender.

Définition de la capacité requise pour l'Email Sender
Définition de la capacité requise pour l'Email Sender

Par défaut manage_options afin que les abonnés ne puissent pas utiliser la mutation pour envoyer des spams à des destinataires arbitraires. Sélectionnez (any logged-in user) pour désactiver la vérification.

HTTP Client — CapacitĂ© requise pour accĂ©der aux URLs internes

Certaines URLs résolvent vers des adresses internes (127.0.0.1, plages link-local, endpoints cloud-metadata, etc.) qui peuvent exposer des services internes si elles sont atteintes. Un nouveau paramÚtre sous Plugin Configuration > HTTP Client restreint le ciblage de ces adresses aux utilisateurs disposant d'une capacité WordPress spécifique.

Définition de la capacité requise pour accéder aux URLs internes
Définition de la capacité requise pour accéder aux URLs internes

Par défaut manage_options afin que les utilisateurs non-admin ne puissent pas atteindre les services internes via les champs HTTP Client. Sélectionnez (any logged-in user) pour désactiver la vérification.

Environment Variables — liste de refus pour les utilisateurs non-admin

Le champ _env nĂ©cessitait dĂ©jĂ  une allow-list explicite, et cette liste est vide par dĂ©faut. v18 ajoute un filet de sĂ©curitĂ© supplĂ©mentaire pour les utilisateurs non-admin : mĂȘme si ces noms figurent dans la allow-list de la configuration, l'accĂšs leur est refusĂ©.

Toujours refusés (secrets 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.

Également refusĂ©s — toute variable dont le nom contient : PASSWORD, PASSWD, SECRET, PRIVATE_KEY, API_KEY, APIKEY, ACCESS_KEY, ACCESS_TOKEN, AUTH_TOKEN, BEARER, CREDENTIAL, SALT.

Les utilisateurs admin conservent un accĂšs complet.

âžĄïž Consultez la section Security de la documentation pour la liste complĂšte.

🌐 Traduction : nouveau fournisseur Gemini

La directive @strTranslate prend désormais en charge Google Gemini comme fournisseur de traduction, aux cÎtés de ChatGPT, Claude, DeepL, DeepSeek, Google Translate, Mistral, OpenRouter et les LLMs auto-hébergés.

Traduisez n'importe quel champ String dans la langue souhaitée :

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

Les modĂšles Gemini suivants sont pris en charge :

  • 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)

Configurez votre clĂ© API Google (via Settings, wp-config.php, ou une variable d'environnement), choisissez un modĂšle, et vous ĂȘtes prĂȘt Ă  traduire.

âžĄïž Consultez la documentation de rĂ©fĂ©rence de Gemini Translation.

⏱ Traduction : dĂ©lais de Request et Connection

La traduction d'un long document via un fournisseur tiers peut ĂȘtre lente, et un upstream bloquĂ© retiendrait sinon un worker PHP jusqu'Ă  ce que PHP lui-mĂȘme tue la requĂȘte — produisant un HTTP 502 / 504 gĂ©nĂ©rique ou une page blanche "Maximum execution time exceeded".

v18 expose deux paramÚtres de délai sous Plugin Configuration > Translation :

  • Request timeout : durĂ©e maximale (en secondes) d'attente pour la rĂ©ponse complĂšte du fournisseur de traduction.
  • Connection timeout : durĂ©e maximale (en secondes) d'attente lors de l'Ă©tablissement de la connexion.
Définition du Request timeout et du Connection timeout pour la traduction
Définition du Request timeout et du Connection timeout pour la traduction

Maintenez les deux valeurs légÚrement en dessous du max_execution_time de votre serveur afin qu'une traduction bloquée échoue proprement avec une erreur contrÎlée dans les logs plutÎt que de déclencher le délai générique du serveur. Si vos traductions expirent réguliÚrement, augmentez ces deux valeurs et le max_execution_time de votre serveur en tandem.

🐛 Corrections de bugs et correctifs de sĂ©curitĂ©

En plus des nouvelles fonctionnalités ci-dessus, v18.0 inclut également plusieurs corrections de bugs et corrige quelques vulnérabilités de sécurité. Nous recommandons vivement de mettre à jour vers v18 dÚs que possible.

Mise Ă  jour

La version est dĂ©ployĂ©e maintenant via le rĂ©pertoire de plugins WordPress et votre tableau de bord client. Mettez Ă  jour depuis votre administration WordPress (Plugins → Updates), ou tĂ©lĂ©chargez la derniĂšre version depuis votre compte.

Consultez le changelog pour la liste complĂšte des changements.

Profitez de v18 ! 🎉


Abonnez-vous Ă  notre newsletter

Restez au courant de toutes les nouveautés de Gato GraphQL.