Koncepcje, Idee, Strategie
Koncepcje, Idee, StrategiePodobieństwa między hookami WordPress a dyrektywami GraphQL

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.