Блог

🚀 Выпущен Gato GraphQL v18.0: кэширование разобранных queries, усиленная безопасность и новый провайдер перевода Gemini


Gato GraphQL v18.0 вышел 🎉

Этот релиз заметно быстрее и значительно экономнее по памяти, позволяет кэшировать разобранные GraphQL queries на диск, чтобы пропускать повторный разбор и компиляцию, ужесточает проверки возможностей по умолчанию для полей Email Sender, HTTP Client и Environment Variable, включает несколько исправлений ошибок и несколько патчей безопасности, а также добавляет новый провайдер перевода Gemini и настраиваемые таймауты Request и Connection для переводов.

Читайте дальше об основных новшествах.

⚡ Кэширование разобранных GraphQL queries на диск

Каждый запрос должен разобрать GraphQL query, проверить её против схемы и построить план выполнения. В v18 теперь можно сохранять подготовленную query на диск и загружать её при последующих запусках — полностью пропуская повторный разбор и компиляцию.

Включите это на странице Settings в разделе Server Configuration > Caching > Cache parsed GraphQL queries?:

Включение кэша для разобранных GraphQL queries в Settings
Включение кэша для разобранных GraphQL queries в Settings

Это кэширует подготовку query (разбор и компиляцию), а не данные ответа. Для HTTP-кэширования ответов см. Добавление HTTP-кэширования.

Файлы хранятся в директории кэша плагина. Если папка плагина недоступна для записи, вы можете указать другое место для кэша — см. Переопределение папки кэша.

➡️ Подробности в Кэширование разобранных GraphQL queries.

⚡ Быстрее и легче — повсеместно

Помимо кэша разобранных queries, внутренние механизмы плагина были переработаны в v18: каждый GraphQL-запрос заметно быстрее и значительно экономнее по памяти.

Улучшения глобальны — они применяются к каждой query, каждой директиве, каждому persisted query — и особенно заметны на больших схемах, длинных queries и сайтах, выполняющих много GraphQL-запросов на страницу (например, headless WordPress, внутренние API).

Крупные сайты, которые раньше упирались в лимиты памяти PHP или страдали от медленного времени ответа, должны ощутить реальную разницу — никаких изменений конфигурации не требуется, просто обновите плагин.

🔒 Усиленные настройки безопасности по умолчанию

В трёх областях были ужесточены настройки по умолчанию, чтобы плагин был более безопасным «из коробки».

Email Sender — Требуемая возможность

Мутация _sendEmail теперь может быть ограничена для пользователей с определённой возможностью WordPress, настраиваемой в разделе Plugin Configuration > Email Sender.

Настройка требуемой возможности для Email Sender
Настройка требуемой возможности для Email Sender

По умолчанию установлена manage_options, чтобы подписчики не могли использовать мутацию для рассылки спама произвольным получателям. Выберите (any logged-in user), чтобы отключить проверку.

HTTP Client — Требуемая возможность для доступа к внутренним URL

Некоторые URL разрешаются в внутренние адреса (127.0.0.1, диапазоны link-local, конечные точки cloud-metadata и т. д.), которые могут раскрывать внутренние сервисы при обращении к ним. Новая настройка в разделе Plugin Configuration > HTTP Client ограничивает обращение к таким адресам для пользователей с определённой возможностью WordPress.

Настройка требуемой возможности для доступа к внутренним URL
Настройка требуемой возможности для доступа к внутренним URL

По умолчанию установлена manage_options, чтобы пользователи без прав администратора не могли обращаться к внутренним сервисам через поля HTTP Client. Выберите (any logged-in user), чтобы отключить проверку.

Environment Variables — список запрещённых для не-администраторов

Поле _env уже требовало явного списка разрешённых, который по умолчанию пуст. В v18 добавлена дополнительная защита для не-администраторов: даже если эти имена включены в список разрешённых в конфигурации, им будет отказано в доступе.

Всегда запрещены (секреты 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.

Также запрещены — любые переменные, имя которых содержит: PASSWORD, PASSWD, SECRET, PRIVATE_KEY, API_KEY, APIKEY, ACCESS_KEY, ACCESS_TOKEN, AUTH_TOKEN, BEARER, CREDENTIAL, SALT.

Пользователи с правами администратора по-прежнему имеют полный доступ.

➡️ См. раздел Security в документации для полного списка.

🌐 Перевод: новый провайдер Gemini

Директива @strTranslate теперь поддерживает Google Gemini в качестве провайдера перевода наряду с ChatGPT, Claude, DeepL, DeepSeek, Google Translate, Mistral, OpenRouter и самостоятельно размещёнными LLM.

Переводите любое поле String на нужный язык:

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

Поддерживаются следующие модели 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)

Настройте ваш Google API key (через Settings, wp-config.php или переменную окружения), выберите модель — и вы готовы переводить.

➡️ См. справочную документацию по Gemini Translation.

⏱️ Перевод: таймауты Request и Connection

Перевод длинного документа через сторонний провайдер может быть медленным, а зависший upstream иначе удерживал бы PHP-воркер до тех пор, пока PHP сам не прервёт запрос — что приводит к обобщённой ошибке HTTP 502 / 504 или пустой странице «Maximum execution time exceeded».

В v18 доступны два параметра таймаута в разделе Plugin Configuration > Translation:

  • Request timeout: максимальное время ожидания (в секундах) полного ответа от провайдера перевода.
  • Connection timeout: максимальное время ожидания (в секундах) при установке соединения.
Настройка таймаутов Request timeout и Connection timeout для перевода
Настройка таймаутов Request timeout и Connection timeout для перевода

Держите оба значения немного ниже max_execution_time вашего сервера, чтобы зависший перевод завершался с контролируемой ошибкой в логах вместо срабатывания общего серверного таймаута. Если переводы регулярно прерываются по таймауту, увеличьте оба этих значения и max_execution_time вашего сервера одновременно.

🐛 Исправления ошибок и патчи безопасности

Помимо новых функций, v18.0 также включает несколько исправлений ошибок и закрывает ряд уязвимостей безопасности. Настоятельно рекомендуем обновиться до v18 как можно скорее.

Обновление

Релиз распространяется через директорию плагинов WordPress и панель управления клиента. Обновите плагин из административной панели WordPress (Plugins → Updates) или загрузите последнюю версию из своего аккаунта.

Смотрите changelog для полного списка изменений.

Наслаждайтесь v18! 🎉


Подпишитесь на нашу рассылку

Будьте в курсе всех обновлений Gato GraphQL.