Configurare lo schema
Configurare lo schemaUtilizzo delle direttive multi-campo

Utilizzo delle direttive multi-campo

Una direttiva multi-campo è una direttiva che può essere applicata a più campi, invece che a uno solo. Quando è abilitata, viene aggiunto un argomento affectAdditionalFieldsUnderPos a tutte le direttive, dove è possibile specificare le posizioni relative dei campi aggiuntivi a cui applicare la direttiva.

Ad esempio, nella seguente query, la direttiva @strTranslate viene applicata solo al campo content:

{
  posts {
    excerpt
    content @strTranslate
  }
}

La direttiva @strTranslate può essere applicata anche al campo excerpt, aggiungendo l'argomento di direttiva affectAdditionalFieldsUnderPos con valore [1] (poiché 1 è la posizione relativa del campo excerpt rispetto alla direttiva @strTranslate):

{
  posts {
    excerpt
    content
      @strTranslate(
        affectAdditionalFieldsUnderPos: [1]
      )
  }
}

Il numero di campi da aggiungere non è limitato. In questa query, anche dateStr viene tradotto:

{
  posts {
    dateStr
    excerpt
    content
      @strTranslate(
        affectAdditionalFieldsUnderPos: [1, 2]
      )
  }
}

Il campo su cui la direttiva viene applicata in modo naturale (come content in tutte le query sopra) non deve essere specificato nell'argomento.

Nella query sopra, le posizioni relative dalla direttiva @strTranslate ai campi precedenti sono:

  • Posizione 2: dateStr
  • Posizione 1: excerpt
  • Posizione 0: content <= è implicita, sempre applicata

Casi d'uso

Esistono due casi d'uso principali per questa funzionalità:

  1. Prestazioni
  2. Funzionalità estesa

Prestazioni

Per le direttive che eseguono chiamate ad API esterne, minore è il numero di richieste che eseguono, più velocemente verranno risolte.

È il caso della direttiva @strTranslate, che si connette all'API Google Translate. Normalmente, per tradurre i campi content ed excerpt da un elenco di post, la query sarebbe questa:

query {
  posts {
    excerpt @strTranslate
    content @strTranslate
  }
}

Aggiungendo @strTranslate due volte, questa query esegue due richieste all'API Google Translate (una per tradurre tutti i valori di excerpt, una per tutti i valori di content).

Grazie alla funzionalità Multi-Field Directives, la query seguente traduce anch'essa tutti i valori per entrambi i campi content ed excerpt, ma esegue una sola richiesta all'API Google Translate:

query {
  posts {
    excerpt
    content
      @strTranslate(
        affectAdditionalFieldsUnderPos: [1]
      )
  }
}

Funzionalità estesa

Le direttive che ricevono campi aggiuntivi possono fornire calcoli supplementari.

Ad esempio, la direttiva @export esporta normalmente il valore di un singolo campo, come il nome dell'utente connesso:

query GetLoggedInUserName {
  me {
    name @export(as: "userName")
  }
}

Tramite l'argomento affectAdditionalFieldsUnderPos, @export può ricevere più campi, ed esporterà quindi un dizionario contenente quei campi come voci:

query GetLoggedInUserNameAndSurname {
  me {
    name
    surname
      @export(
        as: "userProps"
        affectAdditionalFieldsUnderPos: [1]
      )
  }
}

@export produrrà ora il seguente valore nella variabile $userProps

{
  "name": "Leo",
  "surname": "Loso"
}

Configurazione

Per abilitare o disabilitare le direttive multi-campo nello schema GraphQL, vai al modulo "Multi-Field Directives" nella pagina delle Impostazioni, e spunta/deseleziona la casella Enable multi-field directives?:

Impostazioni per Multi-Field Directives
Impostazioni per Multi-Field Directives

Per abilitare o disabilitare le direttive multi-campo su un endpoint specifico, seleziona l'opzione desiderata nel blocco "Multi-Field Directives" della Schema Configuration corrispondente:

Multi-Field Directives nella Schema Configuration
Multi-Field Directives nella Schema Configuration