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 implicitoaffectDirectivesUnderPos: [1])
{
someField
@underEachArrayItem
@strTranslate
}Nell'esempio seguente, abbiamo invece:
@strTranslatee@strUpperCasesono annidate sotto@underEachArrayItem(come indicato dalle posizioni relative[1, 2]nell'argomentoaffectDirectivesUnderPos)
{
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?:

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