Concepts, idées, stratégies
Concepts, idées, stratégiesSimilitudes entre les hooks WordPress et les directives GraphQL

Similitudes entre les hooks WordPress et les directives GraphQL

Une application WordPress est hautement extensible grâce aux extensions et à l'utilisation de hooks (actions et filtres) pour modifier le comportement d'un morceau de code (qu'il provienne du cœur de WordPress, du thème ou des extensions). Les hooks sont de simples morceaux de code qui peuvent remplacer une valeur, ou exécuter une action, chaque fois qu'ils sont déclenchés.

Dans cet exemple, le filtre block_categories permet de modifier les catégories de blocs activées dans l'éditeur WordPress :

\add_filter(
  'block_categories',
  function(array $categories): array
  {
    return [
      ...$categories,
      [
        'slug' => 'graphql-api-access-control',
        'title' => __('Access Control for GraphQL', 'graphql-api'),
      ],
    ];
  }
);

Les hooks sont simples, polyvalents et puissants ; ils peuvent être utilisés à mauvais escient, mais bien implémentés, ils rendent l'application grandement extensible de façons que le développeur n'avait pas planifiées à l'avance.

Les directives GraphQL comme hooks

Les directives peuvent être considérées comme l'équivalent pour GraphQL de ce que les hooks sont pour WordPress.

De la même façon qu'un hook WordPress, une directive est une fonction qui modifie la valeur d'un champ, augmentant ainsi certaines autres fonctionnalités. Comme son homologue, elle est simple, polyvalente et puissante.

Par exemple, supposons que nous récupérions une liste de titres d'articles avec cette requête :

query {
  posts {
    title
  }
}

Ces résultats sont en anglais. Comment pouvons-nous les traduire en français ? Avec une directive @strTranslate appliquée au champ title, qui prend la valeur du champ comme entrée, appelle l'API Google Translate pour la traduire, et retourne cette sortie, comme dans cette requête :

query {
  posts {
    title @strTranslate(from: "en", to: "fr")
  }
}

Le cas d'usage pour l'extensibilité est clair : étant donné une valeur pour le champ title, nous pouvons la modifier de toute façon souhaitée via une directive. Dans ce cas, sa modification est la traduction en français via @strTranslate, mais elle pourrait aussi être la conversion en majuscules/minuscules via @strUpperCase et @strLowerCase, ou n'importe quoi d'autre.