Verwendung von komponierbaren Direktiven
Lass eine Direktive das Verhalten einer anderen Direktive verändern.
Diese Funktionalität ermöglicht es, eine Direktive zu verwenden, wenn man sie andernfalls aufgrund eines Typkonflikts nicht verwenden könnte (d. h. wenn eine Direktive nicht auf das Feld angewendet werden kann, weil ihr Input sich vom Output des Feldes unterscheidet).
Zum Beispiel gibt das Feld capabilities [String] (ein Array von Strings) zurück, und die Direktive @strUpperCase empfängt String. Daher gibt die Ausführung der folgenden query aufgrund des Typkonflikts einen Fehler zurück:
query {
user(by: {id: 1}) {
capabilities @strUpperCase
}
}Mit komponierbaren Direktiven können wir die Direktive @underEachArrayItem einsetzen (die über ein Array von Elementen iteriert und ihre verschachtelte Direktive auf jedes einzelne anwendet), um die Voraussetzungen zu schaffen, bevor @strUpperCase ausgeführt wird, sodass sie ein einzelnes Element (vom Typ String) empfängt.
Die obige query kann auf folgende Weise erfüllt werden:
query {
user(by: {id: 1}) {
capabilities
@underEachArrayItem
@strUpperCase
}
}Meta-Direktiven
Jede Meta-Direktive kann mehrere Direktiven gleichzeitig beeinflussen (oder „verschachteln"). Welche Direktiven betroffen sind, wird über das Argument affectDirectivesUnderPos angegeben, das ein Array von positiven ganzen Zahlen empfängt, die jeweils die relative Position der betroffenen Direktive definieren.
Standardmäßig hat das Argument affectDirectivesUnderPos den Standardwert [1], was bedeutet, dass es die Direktive direkt daneben beeinflusst.
Im folgenden Beispiel haben wir:
@underEachArrayItemist die Meta-Direktive@strTranslateist unter@underEachArrayItemverschachtelt (impliziter StandardwertaffectDirectivesUnderPos: [1])
{
someField
@underEachArrayItem
@strTranslate
}Im folgenden Beispiel haben wir stattdessen:
@strTranslateund@strUpperCasesind unter@underEachArrayItemverschachtelt (wie durch die relativen Positionen[1, 2]im ArgumentaffectDirectivesUnderPosangegeben)
{
someField
@underEachArrayItem(affectDirectivesUnderPos: [1, 2])
@strTranslate
@strUpperCase
}Meta-Direktiven können auch innerhalb anderer Meta-Direktiven verschachtelt werden.
Im folgenden Beispiel haben wir:
@underEachArrayItemist die äußerste Meta-Direktive@underJSONObjectPropertyist unter@underEachArrayItemverschachtelt@strUpperCaseist unter@underJSONObjectPropertyverschachtelt
query UppercaseEntriesInsideObject {
entries: _echo(value: [
{
text: "Hello my friends"
},
{
text: "How do you like this software so far?"
}
])
@underEachArrayItem
@underJSONObjectProperty(by: { key: "text" })
@strUpperCase
}Konfiguration
Um komponierbare Direktiven im GraphQL-Schema zu aktivieren oder zu deaktivieren, gehe zum Modul "Composable Directives" auf der Einstellungsseite und aktiviere/deaktiviere die Checkbox Enable composable directives?:

Um komponierbare Direktiven für einen bestimmten Endpoint zu aktivieren oder zu deaktivieren, wähle die gewünschte Option im Block "Composable Directives" der entsprechenden Schema Configuration:
