Een API maken
Een API makenHTTP-caching toevoegen

HTTP-caching toevoegen

Wanneer queries worden uitgevoerd op de GraphQL-server via GET (in plaats van de meer traditionele POST-methode), kan de GraphQL-respons worden gecached aan de clientzijde of in tussenstappen tussen de client en de server (zoals een CDN), door gebruik te maken van standaard HTTP-caching.

Dit werkt van nature voor persisted queries, en voor het single endpoint en custom endpoints kan het werken door de parameter ?query={ GraphQL query } aan het endpoint toe te voegen.

De configuratie wordt gemaakt via een cache control list en aan het endpoint geleverd via de schemaconfiguratie.

Het endpoint uitvoeren via GET

Persisted queries zijn al geschikt om via GET uitgevoerd te worden, omdat ze de GraphQL-query op de server opslaan (d.w.z. die hoeft niet in de body van het verzoek te worden meegegeven).

Voor het single endpoint en custom endpoints moet de query echter worden opgegeven onder de parameter ?query=... die aan de endpoint-URL is toegevoegd.

Bijvoorbeeld de volgende GraphQL-query:

{
  posts {
    id
    title
    url
    author {
      id
      name
      url
    }
  }
}

...kan via GET op het single endpoint als volgt worden uitgevoerd:

https://mysite.com/graphql/?query={ posts { id title url author { id name url } } }

Automatische berekening van max-age

De max-age-waarde van de respons wordt automatisch berekend op basis van de access control lists die aan het endpoint zijn toegewezen (via de schemaconfiguratie).

Deze waarde is de laagste max-age-waarde van alle velden en directives in de gevraagde query, of no-store als:

  • er een mutatie wordt uitgevoerd
  • een veld of directive een max-age heeft met waarde 0
  • een toegangsbeheerregel de gebruikersstatus moet controleren voor een veld of directive (in dat geval is de respons specifiek voor de gebruiker en kan deze niet worden gecached)

Standaard max-age

Velden waaraan geen specifieke max-age is toegewezen, gebruiken de standaardwaarde die is gedefinieerd in de schemaconfiguratie:

Standaard max-age-waarde in de schemaconfiguratie

Als dit niet is ingesteld, wordt de standaard max-age-waarde gebruikt die is gedefinieerd op de instellingenpagina, onder het tabblad "Cache Control". Deze waarde, namelijk 86400 seconden, kan worden gewijzigd in de instellingen.

Voorbeeld

Stel dat we de volgende configuratie van max-age-waarden hebben voor velden van het type User:

  • name => 600
  • url => 30

Dan heeft de respons op deze query de max-age-waarde ingesteld op 86400 (omdat noch displayName noch email zijn geconfigureerd, zodat ze de standaardwaarde gebruiken):

query {
  users {
    displayName
    email
  }
}

De respons op deze query heeft de max-age-waarde ingesteld op 30 (overeenkomstig url, de laagste waarde van alle geconfigureerde velden):

query {
  user(by: {id: 1}) {
    name
    url
  }
}

De respons op deze query heeft de max-age-waarde ingesteld op no-store (omdat veld me de gebruikersstatus vereist):

query {
  me {
    name
    url
  }
}

De respons op deze query heeft de max-age-waarde ingesteld op no-store (omdat er een mutatie wordt uitgevoerd):

mutation {
  createPost {
    id
  }
}

Alle cache control lists bekijken

Door op "Cache Control Lists" in het menu van de plugin te klikken, wordt de lijst van alle gemaakte cache control lists weergegeven:

Cache Control Lists in het beheerpaneel
Cache Control Lists in het beheerpaneel

Een nieuwe cache control list aanmaken

Klik op de knop "Add New Cache Control List" om de WordPress-editor te openen:

Een cache control list aanmaken

Geef de cache control list een titel, voeg vermeldingen toe met velden en directives, en configureer de max-age-waarde voor elk ervan:

Een cache control list aanmaken

Klik als je klaar bent op de knop Publish. De nieuwe cache control list wordt dan beschikbaar voor de schemaconfiguratie.

Cache Control-vermeldingen

Elke cache control list bevat één of meerdere vermeldingen, elk met de volgende elementen:

  • De velden waarvoor caching wordt geconfigureerd
  • De directives waarvoor caching wordt geconfigureerd
  • De max-age-waarde voor elk ervan

Toegangsbeheervermelding

Velden selecteren uit interfaces

Naast velden uit typen kunnen we ook velden uit interfaces selecteren. In dat geval wordt de max-age-waarde toegepast wanneer die velden worden opgevraagd vanuit een type dat de interface implementeert.

Een veld selecteren uit een interface
Een veld selecteren uit een interface

De cache control list beschrijven

Gebruik het veld "Excerpt" in het paneel Documentinstellingen om een beschrijving toe te voegen aan de cache control list.

Meer informatie vind je in de gids Een beschrijving toevoegen aan de API.

De cache control list gebruiken

Nadat je de cache control list hebt aangemaakt, kun je het Custom Endpoint of de Persisted Query er gebruik van laten maken door de bijbehorende schemaconfiguratie te bewerken en de ACL te selecteren uit de lijst onder het blok "Cache Control Lists".

Een cache control list selecteren in de schemaconfiguratie

Als de configuratie niet is aangepast, worden de standaard cache control lists gebruikt die zijn gedefinieerd op de instellingenpagina, onder het tabblad "Cache Control":

De standaard cache control lists selecteren op de instellingenpagina