Utiliser les directives composables
Faites modifier le comportement d'une directive par une autre directive.
Cette fonctionnalité permet d'utiliser une directive, quand autrement nous ne pourrions pas l'utiliser en raison d'une incompatibilité de types (c'est-à-dire quand une directive ne peut pas être appliquée sur le champ, parce qu'elle a une entrée différente de la sortie du champ).
Par exemple, le champ capabilities renvoie [String] (un tableau de chaînes), et la directive @strUpperCase reçoit String. Ainsi, l'exécution de la requête suivante renvoie une erreur en raison de l'incompatibilité de types :
query {
user(by: {id: 1}) {
capabilities @strUpperCase
}
}Avec les directives composables, nous pouvons employer la directive @underEachArrayItem (qui itère sur un tableau d'éléments, et applique sa directive imbriquée à chacun d'eux) pour préparer le terrain avant l'exécution de @strUpperCase, en lui faisant recevoir un seul élément (de type String).
La requête ci-dessus peut être satisfaite ainsi :
query {
user(by: {id: 1}) {
capabilities
@underEachArrayItem
@strUpperCase
}
}Méta-directives
Chaque méta-directive peut affecter (ou « imbriquer ») plusieurs directives à la fois. Les directives concernées sont indiquées via l'argument affectDirectivesUnderPos, qui reçoit un tableau d'entiers positifs, chacun d'eux définissant la position relative de la directive affectée.
Par défaut, l'argument affectDirectivesUnderPos a la valeur par défaut [1], ce qui signifie qu'il affectera la directive juste à côté.
Dans l'exemple ci-dessous, nous avons :
@underEachArrayItemest la méta-directive@strTranslateest imbriquée sous@underEachArrayItem(valeur par défaut impliciteaffectDirectivesUnderPos: [1])
{
someField
@underEachArrayItem
@strTranslate
}Dans l'exemple ci-dessous, nous avons plutôt :
@strTranslateet@strUpperCasesont imbriquées sous@underEachArrayItem(comme indiqué par les positions relatives[1, 2]dans l'argumentaffectDirectivesUnderPos)
{
someField
@underEachArrayItem(affectDirectivesUnderPos: [1, 2])
@strTranslate
@strUpperCase
}Les méta-directives peuvent également être imbriquées dans d'autres méta-directives.
Dans l'exemple ci-dessous, nous avons :
@underEachArrayItemest la méta-directive la plus externe@underJSONObjectPropertyest imbriquée sous@underEachArrayItem@strUpperCaseest imbriquée sous@underJSONObjectProperty
query UppercaseEntriesInsideObject {
entries: _echo(value: [
{
text: "Hello my friends"
},
{
text: "How do you like this software so far?"
}
])
@underEachArrayItem
@underJSONObjectProperty(by: { key: "text" })
@strUpperCase
}Configuration
Pour activer ou désactiver les directives composables dans le schéma GraphQL, allez au module "Composable Directives" sur la page des Réglages, et cochez/décochez la case Enable composable directives? :

Pour activer ou désactiver les directives composables sur un endpoint spécifique, sélectionnez l'option souhaitée dans le bloc "Composable Directives" de la Schema Configuration correspondante :
