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à:
- Prestazioni
- 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?:

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:
