Eine API erstellen
Eine API erstellenHTTP-Caching hinzufügen

HTTP-Caching hinzufügen

Wenn queries gegen den GraphQL-Server per GET (statt der üblicheren POST-Methode) ausgeführt werden, kann die GraphQL-Antwort clientseitig oder auf Zwischenstufen zwischen Client und Server (wie einem CDN) zwischengespeichert werden, indem auf Standard-HTTP-Caching zurückgegriffen wird.

Das funktioniert bei persisted queries von Haus aus, und für den single endpoint und custom endpoints kann es funktionieren, indem der Parameter ?query={ GraphQL query } an den Endpoint angehängt wird.

Die Konfiguration wird über eine Cache-Control-Liste erstellt und dem Endpoint über die Schema-Konfiguration bereitgestellt.

Den Endpoint per GET ausführen

Persisted queries eignen sich bereits für die Ausführung per GET, da sie die GraphQL-Query im Server speichern (d. h. sie muss nicht im Body der Anfrage angegeben werden).

Für den single endpoint und custom endpoints hingegen muss die Query im Parameter ?query=... angegeben werden, der an die Endpoint-URL angehängt wird.

Zum Beispiel kann die folgende GraphQL-Query:

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

...per GET gegen den single endpoint so ausgeführt werden:

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

Automatische max-age-Berechnung

Der max-age-Wert der Antwort wird automatisch aus den dem Endpoint zugewiesenen Access-Control-Listen berechnet (über die Schema-Konfiguration).

Dieser Wert ist der niedrigste max-age-Wert aus allen Feldern und Direktiven in der angeforderten Query, oder no-store, wenn:

  • eine Mutation ausgeführt wird
  • ein Feld oder eine Direktive max-age mit dem Wert 0 hat
  • eine Access-Control-Regel den Benutzerstatus für ein Feld oder eine Direktive prüfen muss (in diesem Fall ist die Antwort benutzerspezifisch und kann daher nicht zwischengespeichert werden)

Standard-max-age

Felder, denen kein spezifischer max-age-Wert zugewiesen wurde, verwenden den Standardwert, der in der Schema-Konfiguration definiert ist:

Standard-max-age-Wert in der Schema-Konfiguration

Wenn nicht festgelegt, wird der auf der Einstellungsseite unter dem Tab „Cache Control" definierte Standard-max-age-Wert verwendet. Dieser Wert, der 86400 Sekunden beträgt, kann in den Einstellungen geändert werden.

Beispiel

Angenommen, wir haben die folgende Konfiguration von max-age-Werten für Felder des Typs User:

  • name => 600
  • url => 30

Dann hat die Antwort auf diese Query den max-age-Wert 86400 (weil weder displayName noch email konfiguriert wurden und daher den Standardwert verwenden):

query {
  users {
    displayName
    email
  }
}

Die Antwort auf diese Query hat den max-age-Wert 30 (entspricht url, dem niedrigsten Wert unter allen konfigurierten Feldern):

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

Die Antwort auf diese Query hat den max-age-Wert no-store (weil das Feld me den Benutzerstatus benötigt):

query {
  me {
    name
    url
  }
}

Die Antwort auf diese Query hat den max-age-Wert no-store (weil sie eine Mutation ausführt):

mutation {
  createPost {
    id
  }
}

Alle Cache-Control-Listen anzeigen

Ein Klick auf „Cache Control Lists" im Menü des Plugins zeigt die Liste aller erstellten Cache-Control-Listen an:

Cache-Control-Listen im Admin-Bereich
Cache-Control-Listen im Admin-Bereich

Eine neue Cache-Control-Liste erstellen

Klicke auf die Schaltfläche „Add New Cache Control List", um den WordPress-Editor zu öffnen:

Eine Cache-Control-Liste erstellen

Gib der Cache-Control-Liste einen Titel, füge Einträge mit Feldern und Direktiven hinzu und konfiguriere den max-age-Wert für sie:

Eine Cache-Control-Liste erstellen

Wenn alles bereit ist, klicke auf die Schaltfläche Publish. Die neue Cache-Control-Liste steht dann für die Schema-Konfiguration zur Verfügung.

Cache-Control-Einträge

Jede Cache-Control-Liste enthält einen oder mehrere Einträge, die jeweils folgende Elemente aufweisen:

  • Die Felder, für die das Caching konfiguriert werden soll
  • Die Direktiven, für die das Caching konfiguriert werden soll
  • Den max-age-Wert für sie

Access-Control-Eintrag

Felder aus Interfaces auswählen

Neben Feldern aus Typen können auch Felder aus Interfaces ausgewählt werden. In diesem Fall wird der max-age-Wert angewendet, wenn diese Felder von einem beliebigen Typ abgefragt werden, der das Interface implementiert.

Ein Feld aus einem Interface auswählen
Ein Feld aus einem Interface auswählen

Die Cache-Control-Liste beschreiben

Verwende das Feld „Excerpt" im Einstellungspanel des Dokuments, um der Cache-Control-Liste eine Beschreibung zu geben.

Weitere Informationen findest du in der Anleitung Eine Beschreibung zur API hinzufügen.

Die Cache-Control-Liste verwenden

Nachdem die Cache-Control-Liste erstellt wurde, kannst du den Custom Endpoint oder die Persisted Query dazu bringen, sie zu verwenden, indem du die entsprechende Schema-Konfiguration bearbeitest und die ACL aus der Liste im Block „Cache Control Lists" auswählst.

Eine Cache-Control-Liste in der Schema-Konfiguration auswählen

Wenn die Konfiguration nicht angepasst wird, werden die Standard-Cache-Control-Listen verwendet, die auf der Einstellungsseite unter dem Tab „Cache Control" definiert sind:

Die Standard-Cache-Control-Listen auf der Einstellungsseite auswählen