Persisted Queries
Persisted QueriesPersisted Queries

Persisted Queries

Included in the “Power Extensions” bundle

Utilisez des requêtes GraphQL pour créer des endpoints prédéfinis comme en REST, en obtenant les avantages des deux APIs.

Description

Avec REST, vous créez plusieurs endpoints, chacun retournant un ensemble prédéfini de données.

AvantagesInconvénients
✅ C'est simple❌ C'est fastidieux de créer tous les endpoints
✅ Accessible via GET ou POST❌ Un projet peut faire face à des goulots d'étranglement en attendant que les endpoints soient prêts
✅ Peut être mis en cache sur le serveur ou le CDN❌ Produire de la documentation est obligatoire
✅ C'est sécurisé : seules les données prévues sont exposées❌ Peut être lent (principalement pour les applications mobiles), car l'application peut nécessiter plusieurs requêtes pour récupérer toutes les données

Avec GraphQL, vous fournissez n'importe quelle requête à un seul endpoint, qui retourne exactement les données demandées.

AvantagesInconvénients
✅ Pas de sous/sur-récupération de données❌ Accessible uniquement via POST
✅ Peut être rapide, car toutes les données sont récupérées en une seule requête❌ Ne peut pas être mis en cache sur le serveur ou le CDN, ce qui le rend plus lent et plus coûteux
✅ Permet une itération rapide du projet❌ Peut nécessiter de réinventer la roue, comme pour l'upload de fichiers ou la mise en cache
✅ Peut être auto-documenté❌ Doit faire face à des complexités supplémentaires, comme le problème N+1
✅ Fournit un éditeur pour la requête (GraphiQL) qui simplifie la tâche 

Les persisted queries combinent ces 2 approches :

  • Elles utilisent GraphQL pour créer et résoudre des requêtes
  • Mais au lieu d'exposer un seul endpoint, elles exposent chaque requête prédéfinie sous son propre endpoint

Ainsi, on obtient plusieurs endpoints avec des données prédéfinies, comme en REST, mais créés à l'aide de GraphQL, en obtenant les avantages de chacun et en évitant leurs inconvénients :

AvantagesInconvénients
✅ Accessible via GET ou POST❌ C'est fastidieux de créer tous les endpoints
✅ Peut être mis en cache sur le serveur ou le CDN❌ Un projet peut faire face à des goulots d'étranglement en attendant que les endpoints soient prêts
✅ C'est sécurisé : seules les données prévues sont exposées❌ Produire de la documentation est obligatoire
✅ Pas de sous/sur-récupération de données❌ Peut être lent (principalement pour les applications mobiles), car l'application peut nécessiter plusieurs requêtes pour récupérer toutes les données
✅ Peut être rapide, car toutes les données sont récupérées en une seule requête❌ Accessible uniquement via POST
✅ Permet une itération rapide du projet❌ Ne peut pas être mis en cache sur le serveur ou le CDN, ce qui le rend plus lent et plus coûteux
✅ Peut être auto-documenté❌ Peut nécessiter de réinventer la roue, comme pour l'upload de fichiers ou la mise en cache
✅ Fournit un éditeur pour la requête (GraphiQL) qui simplifie la tâche❌ Doit faire face à des complexités supplémentaires, comme le problème N+1 👈🏻 ce problème est résolu par le moteur sous-jacent

Éditeur de persisted query

Exécution de la Persisted Query

Une fois la persisted query publiée, nous pouvons l'exécuter via son permalien.

La persisted query peut être exécutée directement dans le navigateur, car elle est accessible via GET, et nous obtiendrons les données demandées au format JSON :

Exécution d'une persisted query dans le navigateur

Création d'une Persisted Query

En cliquant sur le lien Persisted Queries dans le menu, la liste de toutes les persisted queries créées s'affiche :

Persisted queries avec description
Persisted queries avec description

Une persisted query est un custom post type (CPT). Pour créer une nouvelle persisted query, cliquez sur le bouton "Ajouter une nouvelle persisted query GraphQL", ce qui ouvrira l'éditeur WordPress :

Création d'une nouvelle Persisted Query

La saisie principale est le client GraphiQL, qui est fourni avec l'Explorer par défaut. Cliquer sur les champs dans le panneau latéral gauche les ajoute à la requête, et cliquer sur le bouton "Run" exécute la requête :

GraphiQL Explorer

Lorsque la requête est prête, publiez-la, et son permalien devient son endpoint. Le lien vers l'endpoint (et vers la source) est affiché dans le panneau latéral "Aperçu de l'Endpoint de Persisted Query" :

Aperçu de l'Endpoint de Persisted Query

En ajoutant ?view=source au permalien, la persisted query et sa configuration s'afficheront (à condition que l'utilisateur soit connecté et que son rôle ait accès) :

Source de la persisted query

Par défaut, l'endpoint de la persisted query a le chemin /graphql-query/, et cette valeur est configurable via les Paramètres :

Paramètres de Persisted query
Paramètres de Persisted query

Configuration du schéma

La définition des éléments que contient le schéma, et de l'accès que les utilisateurs y auront, est définie dans la configuration du schéma.

Nous devons donc créer une configuration du schéma, puis la sélectionner dans le menu déroulant :

Sélection de la configuration du schéma

Organisation des Persisted Queries par catégorie

Dans le panneau latéral "Catégories d'endpoint", nous pouvons ajouter des catégories pour aider à gérer la Persisted Query :

Catégories d'endpoint lors de la modification d'une Persisted Query

Par exemple, nous pouvons créer des catégories pour gérer les endpoints par client, application, ou toute autre information nécessaire :

Liste des catégories d'endpoint

Dans la liste des Persisted Queries, nous pouvons visualiser leurs catégories et, en cliquant sur n'importe quel lien de catégorie, ou en utilisant le filtre en haut, seules les entrées de cette catégorie seront affichées :

Liste des Persisted Queries avec leurs catégories

Persisted queries privées

En définissant le statut de la Persisted Query sur private, l'endpoint ne peut être accessible que par l'administrateur. Cela évite que nos données soient partagées involontairement avec des utilisateurs qui ne devraient pas y avoir accès.

Par exemple, nous pouvons créer des Persisted Queries privées pour aider à gérer l'application, comme la récupération de données pour créer des rapports avec nos métriques.

Persisted Query privée

Persisted queries protégées par mot de passe

Si nous créons une Persisted Query pour un client spécifique, nous pouvons lui attribuer un mot de passe, afin de fournir un niveau de sécurité supplémentaire et que seul ce client accède à l'endpoint.

Persisted Query protégée par mot de passe

Lors du premier accès à une persisted query protégée par mot de passe, un écran demandant le mot de passe s'affiche :

Persisted Query protégée par mot de passe : Premier accès

Une fois le mot de passe fourni et validé, l'utilisateur accède alors à l'endpoint prévu.

Rendre la persisted query dynamique via des paramètres URL

La valeur de chaque variable peut être définie via un paramètre URL (avec le nom de la variable) lors de l'exécution de la persisted query. Si l'option "Les paramètres URL remplacent-ils les variables ?" est activée, le paramètre URL aura la priorité. Sinon, la valeur définie dans le dictionnaire de variables aura la priorité (le cas échéant).

Par exemple, dans cette requête, le nombre de résultats est contrôlé via la variable $limit, avec une valeur par défaut de 3 :

Utilisation de variables dans la persisted query

Lors de l'exécution de cette persisted query, passer ?limit=5 exécutera la requête en retournant 5 résultats à la place :

Remplacement de la valeur des variables dans la persisted query