Configurare lo schema
Configurare lo schemaUtilizzo delle direttive composabili

Utilizzo delle direttive composabili

Fai modificare il comportamento di una direttiva da un'altra direttiva.

Questa funzionalità consente di utilizzare una direttiva, quando altrimenti non sarebbe possibile utilizzarla a causa di un'incompatibilità di tipo (ovvero quando una direttiva non può essere applicata al campo, perché ha un input diverso dall'output del campo).

Ad esempio, il campo capabilities restituisce [String] (un array di stringhe), e la direttiva @strUpperCase riceve String. Pertanto, l'esecuzione della seguente query restituisce un errore a causa dell'incompatibilità di tipo:

query {
  user(by: {id: 1}) {
    capabilities @strUpperCase
  }
}

Con le direttive composabili, possiamo impiegare la direttiva @underEachArrayItem (che itera su un array di elementi e applica la sua direttiva annidata a ciascuno di essi) per preparare il terreno prima che @strUpperCase venga eseguita, facendole ricevere un singolo elemento (di tipo String).

La query di cui sopra può essere soddisfatta in questo modo:

query {
  user(by: {id: 1}) {
    capabilities
      @underEachArrayItem
        @strUpperCase
  }
}

Meta-direttive

Ogni meta-direttiva può influenzare (o "annidare") più direttive contemporaneamente. Le direttive interessate sono indicate tramite l'argomento affectDirectivesUnderPos, che riceve un array di interi positivi, ciascuno dei quali definisce la posizione relativa della direttiva interessata.

Per impostazione predefinita, l'argomento affectDirectivesUnderPos ha il valore predefinito [1], il che significa che influenzerà la direttiva immediatamente adiacente.

Nell'esempio seguente, abbiamo:

  • @underEachArrayItem è la meta-direttiva
  • @strTranslate è annidata sotto @underEachArrayItem (valore predefinito implicito affectDirectivesUnderPos: [1])
{
  someField
    @underEachArrayItem
      @strTranslate
}

Nell'esempio seguente, abbiamo invece:

  • @strTranslate e @strUpperCase sono annidate sotto @underEachArrayItem (come indicato dalle posizioni relative [1, 2] nell'argomento affectDirectivesUnderPos)
{
  someField
    @underEachArrayItem(affectDirectivesUnderPos: [1, 2])
      @strTranslate
      @strUpperCase
}

Le meta-direttive possono anche essere annidate all'interno di altre meta-direttive.

Nell'esempio seguente, abbiamo:

  • @underEachArrayItem è la meta-direttiva più esterna
  • @underJSONObjectProperty è annidata sotto @underEachArrayItem
  • @strUpperCase è annidata sotto @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
  }

Configurazione

Per abilitare o disabilitare le direttive composabili nello schema GraphQL, vai al modulo "Composable Directives" nella pagina delle Impostazioni e spunta/deseleziona la casella Enable composable directives?:

Impostazioni per Composable Directives
Impostazioni per Composable Directives

Per abilitare o disabilitare le direttive composabili su un endpoint specifico, seleziona l'opzione desiderata nel blocco "Composable Directives" della Schema Configuration corrispondente:

Composable Directives nella Schema Configuration
Composable Directives nella Schema Configuration