Overeenkomsten tussen WordPress hooks en GraphQL directives
Een WordPress-applicatie is in hoge mate uitbreidbaar via plugins en het gebruik van hooks (actions en filters) om het gedrag van bepaalde stukjes code aan te passen (of dat nu WordPress core, het thema of plugins zijn). Hooks zijn eenvoudige stukjes code die een waarde kunnen overschrijven of een actie kunnen uitvoeren wanneer ze worden aangeroepen.
In dit voorbeeld maakt filter block_categories het mogelijk om de blokcategorieën in de WordPress-editor aan te passen:
\add_filter(
'block_categories',
function(array $categories): array
{
return [
...$categories,
[
'slug' => 'graphql-api-access-control',
'title' => __('Access Control for GraphQL', 'graphql-api'),
],
];
}
);Hooks zijn eenvoudig, veelzijdig en krachtig; ze kunnen worden misbruikt, maar goed geïmplementeerd maken ze de applicatie enorm uitbreidbaar op manieren die de ontwikkelaar van tevoren niet had voorzien.
GraphQL directives als hooks
Directives kunnen worden beschouwd als het equivalent van hooks in WordPress, maar dan voor GraphQL.
Net als een WordPress hook is een directive een functie die de waarde van een veld aanpast en daarmee andere functionaliteit uitbreidt. Net als zijn tegenhanger is het eenvoudig, veelzijdig en krachtig.
Stel bijvoorbeeld dat we een lijst van posttitels ophalen met deze query:
query {
posts {
title
}
}Deze resultaten zijn in het Engels. Hoe kunnen we ze vertalen naar het Nederlands? Met een directive @strTranslate toegepast op het veld title, dat de waarde van het veld als invoer gebruikt, de Google Translate API aanroept om het te vertalen, en dit als uitvoer teruggeeft, zoals in deze query:
query {
posts {
title @strTranslate(from: "en", to: "nl")
}
}Het gebruik voor uitbreidbaarheid is duidelijk: gegeven een waarde voor het veld title kunnen we die op elke gewenste manier aanpassen via een directive. In dit geval bestaat de aanpassing uit een vertaling naar het Nederlands via @strTranslate, maar het kan ook gaan om het omzetten naar hoofdletters of kleine letters via @strUpperCase en @strLowerCase, of wat dan ook.