Het schema configureren
Het schema configurerenGebruik van multi-field directives

Gebruik van multi-field directives

Een multi-field directive is een directive die op meerdere velden tegelijk kan worden toegepast, in plaats van slechts op één. Wanneer dit is ingeschakeld, wordt aan alle directives een argument affectAdditionalFieldsUnderPos toegevoegd, waarmee de relatieve posities van extra velden waarop de directive moet worden toegepast, kunnen worden opgegeven.

In de volgende query wordt directive @strTranslate bijvoorbeeld alleen op het veld content toegepast:

{
  posts {
    excerpt
    content @strTranslate
  }
}

Directive @strTranslate kan ook op het veld excerpt worden toegepast door het directive-argument affectAdditionalFieldsUnderPos met waarde [1] toe te voegen (omdat 1 de relatieve positie van het veld excerpt ten opzichte van directive @strTranslate is):

{
  posts {
    excerpt
    content
      @strTranslate(
        affectAdditionalFieldsUnderPos: [1]
      )
  }
}

Het aantal toe te voegen velden is niet beperkt. In deze query wordt dateStr ook vertaald:

{
  posts {
    dateStr
    excerpt
    content
      @strTranslate(
        affectAdditionalFieldsUnderPos: [1, 2]
      )
  }
}

Het veld waarop de directive van nature wordt toegepast (zoals content in alle bovenstaande queries) hoeft niet in het argument te worden opgegeven.

In de bovenstaande query zijn de relatieve posities van directive @strTranslate naar de voorgaande velden:

  • Positie 2: dateStr
  • Positie 1: excerpt
  • Positie 0: content <= Is impliciet, altijd toegepast

Gebruiksscenario's

Er zijn twee belangrijkste gebruiksscenario's voor deze functie:

  1. Prestaties
  2. Uitgebreide functionaliteit

Prestaties

Voor directives die aanroepen naar externe API's uitvoeren geldt: hoe minder verzoeken ze uitvoeren, hoe sneller ze worden opgelost.

Dat is het geval met directive @strTranslate, die verbinding maakt met de Google Translate API. Normaal gesproken zou de query er als volgt uitzien om de velden content en excerpt van een lijst berichten te vertalen:

query {
  posts {
    excerpt @strTranslate
    content @strTranslate
  }
}

Door @strTranslate twee keer toe te voegen, voert deze query twee verzoeken uit naar de Google Translate API (één om alle waarden van excerpt te vertalen, één voor alle waarden van content).

Dankzij de Multi-Field Directives-functie vertaalt de onderstaande query ook alle waarden voor zowel de velden content als excerpt, maar voert daarvoor slechts één verzoek uit naar de Google Translate API:

query {
  posts {
    excerpt
    content
      @strTranslate(
        affectAdditionalFieldsUnderPos: [1]
      )
  }
}

Uitgebreide functionaliteit

Directives die extra velden ontvangen, kunnen aanvullende berekeningen uitvoeren.

Directive @export exporteert normaal gesproken de waarde van één enkel veld, zoals de naam van de ingelogde gebruiker:

query GetLoggedInUserName {
  me {
    name @export(as: "userName")
  }
}

Via het argument affectAdditionalFieldsUnderPos kan @export meerdere velden ontvangen en exporteert het dan een woordenboek met die velden als vermeldingen:

query GetLoggedInUserNameAndSurname {
  me {
    name
    surname
      @export(
        as: "userProps"
        affectAdditionalFieldsUnderPos: [1]
      )
  }
}

@export produceert nu de volgende waarde in variabele $userProps

{
  "name": "Leo",
  "surname": "Loso"
}

Configuratie

Om multi-field directives in het GraphQL-schema in of uit te schakelen, ga je naar de module "Multi-Field Directives" op de instellingenpagina en vink je het selectievakje Enable multi-field directives? aan of uit:

Instellingen voor Multi-Field Directives
Instellingen voor Multi-Field Directives

Om multi-field directives voor een specifiek eindpunt in of uit te schakelen, selecteer je de gewenste optie in het blok "Multi-Field Directives" van de bijbehorende schemaconfiguratie:

Multi-Field Directives in de schemaconfiguratie
Multi-Field Directives in de schemaconfiguratie