Podobieństwa między hookami WordPress a dyrektywami GraphQL
Aplikacja WordPress jest wysoce rozszerzalna dzięki wtyczkom i stosowaniu hooków (akcji i filtrów) do modyfikowania zachowania fragmentów kodu (zarówno rdzenia WordPress, motywu, jak i wtyczek). Hooki to proste fragmenty kodu, które mogą nadpisywać wartość lub wykonywać akcję przy każdym wywołaniu.
W tym przykładzie filtr block_categories pozwala modyfikować kategorie bloków włączone w edytorze WordPress:
\add_filter(
'block_categories',
function(array $categories): array
{
return [
...$categories,
[
'slug' => 'graphql-api-access-control',
'title' => __('Access Control for GraphQL', 'graphql-api'),
],
];
}
);Hooki są proste, wszechstronne i potężne; mogą być nadużywane, ale dobrze zaimplementowane sprawiają, że aplikacja staje się bardzo rozszerzalna w sposób, którego programista wcześniej nie planował.
Dyrektywy GraphQL jako hooki
Dyrektywy można uznać za odpowiednik hooków WordPress w świecie GraphQL.
Podobnie jak hook WordPress, dyrektywa jest funkcją modyfikującą wartość pola, rozszerzając tym samym inną funkcjonalność. Podobnie jak jej odpowiednik, jest prosta, wszechstronna i potężna.
Na przykład załóżmy, że pobieramy listę tytułów wpisów za pomocą tej query:
query {
posts {
title
}
}Wyniki te są w języku angielskim. Jak możemy je przetłumaczyć na język polski? Za pomocą dyrektywy @strTranslate zastosowanej do pola title, która pobiera wartość pola jako dane wejściowe, wywołuje API Google Translate w celu przetłumaczenia i zwraca tę wartość wyjściową, jak w tej query:
query {
posts {
title @strTranslate(from: "en", to: "pl")
}
}Przypadek użycia dla rozszerzalności jest jasny: mając wartość pola title, możemy ją modyfikować w dowolny sposób za pomocą dyrektywy. W tym przypadku modyfikacja polega na tłumaczeniu na język polski za pomocą @strTranslate, ale może to być również konwersja na wielkie/małe litery za pomocą @strUpperCase i @strLowerCase lub cokolwiek innego.