Configurer le schéma
Configurer le schémaUtiliser les directives composables

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 :

  • @underEachArrayItem est la méta-directive
  • @strTranslate est imbriquée sous @underEachArrayItem (valeur par défaut implicite affectDirectivesUnderPos: [1])
{
  someField
    @underEachArrayItem
      @strTranslate
}

Dans l'exemple ci-dessous, nous avons plutôt :

  • @strTranslate et @strUpperCase sont imbriquées sous @underEachArrayItem (comme indiqué par les positions relatives [1, 2] dans l'argument affectDirectivesUnderPos)
{
  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 :

  • @underEachArrayItem est la méta-directive la plus externe
  • @underJSONObjectProperty est imbriquée sous @underEachArrayItem
  • @strUpperCase est 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? :

Réglages pour Composable Directives
Réglages pour 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 :

Composable Directives dans la Schema Configuration
Composable Directives dans la Schema Configuration