Das Schema konfigurieren
Das Schema konfigurierenVerwendung von komponierbaren Direktiven

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:

  • @underEachArrayItem ist die Meta-Direktive
  • @strTranslate ist unter @underEachArrayItem verschachtelt (impliziter Standardwert affectDirectivesUnderPos: [1])
{
  someField
    @underEachArrayItem
      @strTranslate
}

Im folgenden Beispiel haben wir stattdessen:

  • @strTranslate und @strUpperCase sind unter @underEachArrayItem verschachtelt (wie durch die relativen Positionen [1, 2] im Argument affectDirectivesUnderPos angegeben)
{
  someField
    @underEachArrayItem(affectDirectivesUnderPos: [1, 2])
      @strTranslate
      @strUpperCase
}

Meta-Direktiven können auch innerhalb anderer Meta-Direktiven verschachtelt werden.

Im folgenden Beispiel haben wir:

  • @underEachArrayItem ist die äußerste Meta-Direktive
  • @underJSONObjectProperty ist unter @underEachArrayItem verschachtelt
  • @strUpperCase ist unter @underJSONObjectProperty verschachtelt
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?:

Einstellungen für Composable Directives
Einstellungen für 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:

Composable Directives in der Schema Configuration
Composable Directives in der Schema Configuration