Créer une API
Créer une APIAjouter la mise en cache HTTP

Ajouter la mise en cache HTTP

Lorsque les requêtes sont exécutées contre le serveur GraphQL en utilisant GET (au lieu de la méthode plus traditionnelle POST), la réponse GraphQL peut être mise en cache côté client ou dans des étapes intermédiaires entre le client et le serveur (telles qu'un CDN), en s'appuyant sur la mise en cache HTTP standard.

Cela fonctionne naturellement pour les persisted queries, et pour le single endpoint et les custom endpoints, cela peut fonctionner en ajoutant le paramètre ?query={ GraphQL query } à l'endpoint.

La configuration est créée via une liste de contrôle de cache, et fournie à l'endpoint via la configuration du schéma.

Exécuter l'endpoint via GET

Les persisted queries sont déjà adaptées pour être exécutées via GET, car elles stockent la requête GraphQL sur le serveur (c'est-à-dire qu'elle ne doit pas être fournie dans le corps de la requête).

Pour le single endpoint et les custom endpoints, en revanche, la requête doit être fournie sous le paramètre ?query=... attaché à l'URL de l'endpoint.

Par exemple, la requête GraphQL suivante :

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

...peut être exécutée via GET contre le single endpoint comme ceci :

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

Calcul automatique du max-age

La valeur max-age de la réponse est automatiquement calculée à partir des listes de contrôle d'accès assignées à l'endpoint (via la configuration du schéma).

Cette valeur est la valeur max-age la plus faible parmi tous les champs et directives dans la requête demandée, ou no-store si :

  • une mutation est exécutée
  • un champ ou une directive a max-age avec la valeur 0
  • une règle de contrôle d'accès doit vérifier l'état de l'utilisateur pour un champ ou une directive (dans ce cas, la réponse est spécifique à l'utilisateur, elle ne peut donc pas être mise en cache)

Max-age par défaut

Les champs auxquels aucun max-age spécifique n'est attribué utiliseront la valeur par défaut, définie dans la Configuration du Schéma :

Valeur max-age par défaut dans la Configuration du Schéma

Si elle n'est pas définie, la valeur max-age par défaut définie dans la page des Réglages, sous l'onglet "Cache Control", sera utilisée. Cette valeur, qui est de 86400 secondes, peut être modifiée dans les Réglages.

Exemple

Supposons que nous ayons la configuration suivante de valeurs max-age pour les champs du type User :

  • name => 600
  • url => 30

Alors, la réponse à cette requête aura la valeur max-age définie à 86400 (parce que ni displayName ni email n'ont été configurés, ils utilisent donc la valeur par défaut) :

query {
  users {
    displayName
    email
  }
}

La réponse à cette requête aura la valeur max-age définie à 30 (correspondant à url, qui est la valeur la plus faible parmi tous les champs configurés) :

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

La réponse à cette requête aura la valeur max-age définie à no-store (parce que le champ me requiert l'état de l'utilisateur) :

query {
  me {
    name
    url
  }
}

La réponse à cette requête aura la valeur max-age définie à no-store (parce qu'elle exécute une mutation) :

mutation {
  createPost {
    id
  }
}

Accéder à toutes les listes de contrôle de cache

En cliquant sur "Cache Control Lists" dans le menu du plugin, la liste de toutes les listes de contrôle de cache créées s'affiche :

Listes de contrôle de cache dans l'administration
Listes de contrôle de cache dans l'administration

Créer une nouvelle liste de contrôle de cache

Cliquez sur le bouton "Add New Cache Control List" pour ouvrir l'éditeur WordPress :

Création d'une liste de contrôle de cache

Donnez un titre à la liste de contrôle de cache, ajoutez des entrées avec des champs et des directives, et configurez la valeur max-age pour chacune :

Création d'une liste de contrôle de cache

Lorsqu'elle est prête, cliquez sur le bouton Publish. Ensuite, la nouvelle liste de contrôle de cache devient disponible pour la configuration du schéma.

Entrées de Cache Control

Chaque liste de contrôle de cache contient une ou plusieurs entrées, chacune avec les éléments suivants :

  • Les champs pour lesquels configurer la mise en cache
  • Les directives pour lesquelles configurer la mise en cache
  • La valeur max-age pour chacun

Entrée de contrôle d'accès

Sélectionner des champs depuis des interfaces

En plus des champs issus des types, nous pouvons également sélectionner des champs issus des interfaces. Dans ce cas, la valeur max-age est appliquée lors de l'interrogation de ces champs depuis n'importe quel type implémentant l'interface.

Sélectionner un champ depuis une interface
Sélectionner un champ depuis une interface

Décrire la liste de contrôle de cache

Utilisez le champ "Excerpt", dans le panneau des réglages du document, pour donner une description à la liste de contrôle de cache.

Pour plus d'informations, consultez le guide Ajouter une description à l'API.

Utiliser la liste de contrôle de cache

Après avoir créé la liste de contrôle de cache, nous pouvons faire en sorte que le Custom Endpoint ou la Persisted Query l'utilise en modifiant la Configuration du Schéma correspondante, et en sélectionnant l'ACL depuis la liste sous le bloc "Cache Control Lists".

Sélectionner une liste de contrôle de cache dans la Configuration du Schéma

Si la configuration n'est pas personnalisée, les listes de contrôle de cache par défaut définies sur la page des Réglages, sous l'onglet "Cache Control", seront utilisées :

Sélectionner les listes de contrôle de cache par défaut dans la page des Réglages