Używanie dyrektyw kompozycyjnych
Spraw, aby dyrektywa modyfikowała zachowanie innej dyrektywy.
Ta funkcjonalność pozwala używać dyrektywy w sytuacjach, gdy w innym przypadku nie byłoby to możliwe ze względu na niezgodność typów (tzn. gdy dyrektywa nie może zostać zastosowana do pola, ponieważ jej wejście różni się od wyjścia pola).
Na przykład pole capabilities zwraca [String] (tablicę ciągów znaków), a dyrektywa @strUpperCase przyjmuje String. Dlatego wykonanie poniższego query zwraca błąd z powodu niezgodności typów:
query {
user(by: {id: 1}) {
capabilities @strUpperCase
}
}Dzięki dyrektywom kompozycyjnym możemy zastosować dyrektywę @underEachArrayItem (która iteruje po tablicy elementów i stosuje swoją zagnieżdżoną dyrektywę do każdego z nich), aby przygotować grunt przed wykonaniem @strUpperCase, sprawiając że otrzymuje ona pojedynczy element (typu String).
Powyższe query można zrealizować w następujący sposób:
query {
user(by: {id: 1}) {
capabilities
@underEachArrayItem
@strUpperCase
}
}Meta-dyrektywy
Każda meta-dyrektywa może wpływać (lub „zagnieżdżać") wiele dyrektyw jednocześnie. Dyrektywy, na które ma wpływ, są wskazywane za pomocą argumentu affectDirectivesUnderPos, który przyjmuje tablicę dodatnich liczb całkowitych, z których każda określa względną pozycję danej dyrektywy.
Domyślnie argument affectDirectivesUnderPos ma wartość domyślną [1], co oznacza, że będzie wpływał na dyrektywę znajdującą się bezpośrednio obok.
W poniższym przykładzie mamy:
@underEachArrayItemjest meta-dyrektywą@strTranslatejest zagnieżdżona pod@underEachArrayItem(niejawna wartość domyślnaaffectDirectivesUnderPos: [1])
{
someField
@underEachArrayItem
@strTranslate
}W poniższym przykładzie mamy natomiast:
@strTranslatei@strUpperCasesą zagnieżdżone pod@underEachArrayItem(jak wskazują względne pozycje[1, 2]w argumencieaffectDirectivesUnderPos)
{
someField
@underEachArrayItem(affectDirectivesUnderPos: [1, 2])
@strTranslate
@strUpperCase
}Meta-dyrektywy mogą być również zagnieżdżane wewnątrz innych meta-dyrektyw.
W poniższym przykładzie mamy:
@underEachArrayItemjest najbardziej zewnętrzną meta-dyrektywą@underJSONObjectPropertyjest zagnieżdżona pod@underEachArrayItem@strUpperCasejest zagnieżdżona pod@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
}Konfiguracja
Aby włączyć lub wyłączyć dyrektywy kompozycyjne w schemacie GraphQL, przejdź do modułu "Composable Directives" na stronie Ustawień i zaznacz/odznacz pole wyboru Enable composable directives?:

Aby włączyć lub wyłączyć dyrektywy kompozycyjne w konkretnym endpoincie, wybierz odpowiednią opcję w bloku "Composable Directives" w odpowiedniej Schema Configuration:
