Blog

🚀 Wydano Gato GraphQL v18.0: cache parsowanych queries, wzmocnione bezpieczeństwo i nowy provider tłumaczeń Gemini

Leonardo Losoviz
Autor: Leonardo Losoviz ·

Gato GraphQL v18.0 jest już dostępna 🎉

Ta wersja jest zauważalnie szybsza i zużywa znacznie mniej pamięci, umożliwia cache parsowanych queries GraphQL na dysku w celu wyeliminowania powtarzanej pracy parsowania i kompilacji, wzmacnia domyślne weryfikacje capability dla pól Email Sender, HTTP Client i Environment Variable, zawiera kilka poprawek błędów i łatek bezpieczeństwa, a także dodaje nowego providera tłumaczeń Gemini oraz konfigurowalne limity czasu Request i Connection dla tłumaczeń.

Czytaj dalej, aby zapoznać się z najważniejszymi zmianami.

⚡ Cache parsowanych queries GraphQL na dysku

Każde żądanie musi przeparsować query GraphQL, zwalidować ją względem schematu i zbudować plan wykonania. W v18 można teraz utrwalić przygotowaną query na dysku i ponownie ją załadować przy kolejnych wywołaniach — całkowicie pomijając powtarzaną pracę parsowania i kompilacji.

Włącz tę opcję na stronie Settings, w sekcji Server Configuration > Caching > Cache parsed GraphQL queries?:

Włączanie cache dla parsowanych queries GraphQL w Settings
Włączanie cache dla parsowanych queries GraphQL w Settings

Opcja ta buforuje przygotowanie query (parsowanie i kompilację), a nie dane odpowiedzi. W przypadku cache HTTP odpowiedzi zapoznaj się z artykułem Dodawanie cache HTTP.

Pliki trafiają do katalogu cache wtyczki. Jeśli folder wtyczki nie ma uprawnień do zapisu, możesz wskazać inną lokalizację cache — zapoznaj się z artykułem Nadpisywanie folderu cache.

➡️ Pełne szczegóły w artykule Cache parsowanych queries GraphQL.

⚡ Szybciej i lżej — wszędzie

Poza cache parsowanych queries, wewnętrzna architektura wtyczki została gruntownie przeprojektowana w v18: każde żądanie GraphQL jest zauważalnie szybsze i zużywa znacznie mniej pamięci.

Korzyści są globalne — dotyczą każdej query, każdej dyrektywy, każdych utrwalonych queries — i są szczególnie widoczne na dużych schematach, długich queries oraz stronach wykonujących wiele żądań GraphQL na stronę (np. WordPress headless, wewnętrzne API).

Duże strony, które wcześniej napotykały limity pamięci PHP lub odnotowywały wolne czasy odpowiedzi, powinny odczuć realną różnicę bez konieczności zmiany konfiguracji — wystarczy zaktualizować wtyczkę.

🔒 Wzmocnione domyślne ustawienia bezpieczeństwa

Trzy obszary otrzymały bardziej rygorystyczne ustawienia domyślne, aby wtyczka była bezpieczniejsza od razu po instalacji.

Email Sender — Wymagana capability

Mutacja _sendEmail może być teraz ograniczona do użytkowników posiadających określoną capability WordPress, skonfigurowaną w sekcji Plugin Configuration > Email Sender.

Ustawianie wymaganej capability dla Email Sender
Ustawianie wymaganej capability dla Email Sender

Domyślnie ustawiona jest manage_options, aby subskrybenci nie mogli używać mutacji do spamowania dowolnych odbiorców. Wybierz (any logged-in user), aby wyłączyć weryfikację.

HTTP Client — Wymagana capability do dostępu do wewnętrznych URL

Niektóre URL rozwiązują się do adresów wewnętrznych (127.0.0.1, zakresy link-local, endpointy cloud-metadata itp.), które mogą ujawnić wewnętrzne usługi w przypadku dostępu do nich. Nowe ustawienie w sekcji Plugin Configuration > HTTP Client ogranicza dostęp do tych adresów do użytkowników posiadających określoną capability WordPress.

Ustawianie wymaganej capability do dostępu do wewnętrznych URL
Ustawianie wymaganej capability do dostępu do wewnętrznych URL

Domyślnie ustawiona jest manage_options, aby użytkownicy bez uprawnień administratora nie mogli uzyskiwać dostępu do wewnętrznych usług przez pola HTTP Client. Wybierz (any logged-in user), aby wyłączyć weryfikację.

Environment Variables — denylist dla użytkowników bez uprawnień administratora

Pole _env już wymagało jawnej allow-listy, a lista ta jest domyślnie pusta. V18 dodaje dodatkową warstwę bezpieczeństwa dla użytkowników bez uprawnień administratora: nawet jeśli te nazwy znajdują się na allow-liście w konfiguracji, dostęp do nich jest im blokowany.

Zawsze blokowane (sekrety 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.

Również blokowane — każda zmienna, której nazwa zawiera: PASSWORD, PASSWD, SECRET, PRIVATE_KEY, API_KEY, APIKEY, ACCESS_KEY, ACCESS_TOKEN, AUTH_TOKEN, BEARER, CREDENTIAL, SALT.

Użytkownicy z uprawnieniami administratora nadal mają pełny dostęp.

➡️ Zapoznaj się z sekcją Security dokumentacji, aby zobaczyć pełną listę.

🌐 Tłumaczenia: nowy provider Gemini

Dyrektywa @strTranslate obsługuje teraz Google Gemini jako providera tłumaczeń, obok ChatGPT, Claude, DeepL, DeepSeek, Google Translate, Mistral, OpenRouter oraz self-hosted LLM.

Przetłumacz dowolne pole String na wybrany język:

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

Obsługiwane są następujące modele 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)

Skonfiguruj swój klucz API Google (przez Settings, wp-config.php lub zmienną środowiskową), wybierz model i możesz już tłumaczyć.

➡️ Zapoznaj się z dokumentacją referencyjną Gemini Translation.

⏱️ Tłumaczenia: limity czasu Request i Connection

Tłumaczenie długiego dokumentu przez zewnętrznego providera może być czasochłonne, a zawieszony upstream blokował worker PHP do momentu, aż PHP sam zakończy żądanie — co skutkuje ogólnym błędem HTTP 502 / 504 lub pustą stroną "Maximum execution time exceeded".

V18 udostępnia dwa ustawienia limitu czasu w sekcji Plugin Configuration > Translation:

  • Request timeout: maksymalny czas (w sekundach) oczekiwania na pełną odpowiedź od providera tłumaczeń.
  • Connection timeout: maksymalny czas (w sekundach) oczekiwania podczas nawiązywania połączenia.
Ustawianie limitu czasu Request i Connection dla tłumaczeń
Ustawianie limitu czasu Request i Connection dla tłumaczeń

Ustaw obie wartości nieznacznie poniżej max_execution_time swojego serwera, aby zablokowane tłumaczenie kończyło się w sposób kontrolowany z błędem w logach zamiast wyzwalać ogólny timeout serwera. Jeśli Twoje tłumaczenia regularnie przekraczają limit czasu, zwiększ obie te wartości oraz max_execution_time swojego serwera jednocześnie.

🐛 Poprawki błędów i łatki bezpieczeństwa

Oprócz nowych funkcji opisanych powyżej, v18.0 zawiera również kilka poprawek błędów oraz łata kilka luk bezpieczeństwa. Zdecydowanie zalecamy jak najszybszą aktualizację do v18.

Aktualizacja

Wersja jest teraz wdrażana przez katalog wtyczek WordPress oraz panel klienta. Zaktualizuj przez panel administracyjny WordPress (Plugins → Updates) lub pobierz najnowszą wersję ze swojego konta.

Zapoznaj się z changelogiem, aby zobaczyć pełną listę zmian.

Ciesz się wersją v18! 🎉


Zapisz się do naszego newslettera

Bądź na bieżąco ze wszystkimi aktualizacjami Gato GraphQL.