Skip to Content

Chapitre 9.4 — WPGraphQL

⏱️ TL;DRWPGraphQL est un plugin (non natif) qui expose WordPress via une API GraphQL sur un endpoint unique /graphql. Avantage majeur pour un front moderne : vous demandez exactement les champs voulus, y compris les ressources liées (auteur, image, taxonomies, meta) en une seule requête — fini le sur-fetching et les allers-retours _embed de REST. Il s’intègre parfaitement avec Next.js/Apollo/urql. Le choix REST vs GraphQL dépend du projet ; GraphQL brille sur les fronts headless riches.

🎯 Objectifs

  • Comprendre ce qu’apporte GraphQL vs REST pour WordPress.
  • Écrire une requête GraphQL de base.
  • Connaître l’écosystème (WPGraphQL + extensions).
  • Choisir entre REST et GraphQL selon le contexte.

1. GraphQL en une image

REST expose plusieurs routes, chacune renvoyant un payload figé. GraphQL expose un endpointle client décrit la donnée voulue :

  • REST : plusieurs requêtes (ou _embed), champs imposés (sur-fetching).
  • GraphQL : une requête, champs exacts, ressources liées incluses.

2. Une requête WPGraphQL

Après installation du plugin WPGraphQL, l’endpoint /graphql (et l’IDE GraphiQL dans l’admin) est disponible.

query DerniersLivres { livres(first: 5, where: { orderby: { field: DATE, order: DESC } }) { nodes { id title slug featuredImage { node { sourceUrl altText } } # meta exposée via une extension / registerGraphQLField } } }

Réponse : exactement id, title, slug, l’URL de l’image — rien de plus. Le front reçoit un payload taillé à son besoin.

⚠️ Piège — le CPT/la meta absents de GraphQL. Comme pour REST (show_in_rest), un CPT doit être exposé à GraphQL : à l’enregistrement, show_in_graphql => true + graphql_single_name/graphql_plural_name (options ajoutées par WPGraphQL). Les meta doivent être déclarées via register_graphql_field(). Sans ça, elles n’apparaissent pas dans le schéma.


3. L’écosystème

  • WPGraphQL (le cœur) : expose posts, pages, CPT, taxonomies, menus, users, réglages.
  • Extensions : WPGraphQL for ACF (champs ACF), WPGraphQL for WooCommerce (WooGraphQL), etc.
  • WPGraphQL Smart Cache : mise en cache/invalidation, essentielle en production.
  • Côté front : Apollo Client, urql, ou un simple fetch POST — tous compatibles Next.js. Des outils génèrent les types TypeScript depuis le schéma (GraphQL Code Generator).

💡 Pour un dev React — Si vous venez d’Apollo/urql/GraphQL Code Generator, WPGraphQL vous met en terrain connu : un schéma typé, des requêtes précises, la génération de types TS, l’intégration Next.js. C’est souvent l’expérience la plus agréable pour un front headless riche — WordPress devient une simple source de données GraphQL, comme n’importe quel back GraphQL.


4. REST ou GraphQL ? (décision)

CritèreREST (natif)WPGraphQL (plugin)
InstallationNatifPlugin à installer/maintenir
Sur-fetchingOui (mitigé par _fields/_embed)Non (champs exacts)
Requêtes liées_embed ou multiplesUne requête
Typage frontManuelSchéma typé (codegen)
Écriture (mutations)Verbes HTTPMutations GraphQL
Écosystème existantUniverselRiche mais dépend de plugins

Repères :

  • REST : suffit pour des besoins simples, pas de dépendance à ajouter, endpoints custom faciles (ch. 9.3). Bon défaut.
  • WPGraphQL : front riche avec beaucoup de relations, équipe habituée à GraphQL, besoin de payloads précis et de types générés. Excellent pour un gros projet headless.

⚠️ Piège — GraphQL « par principe ». Ajouter WPGraphQL sur un petit site où REST suffit, c’est une dépendance de plus à maintenir (mises à jour, cache, sécurité) pour peu de gain. Choisissez selon la complexité réelle du front, pas par mode.


5. Sécurité et performance (rappels)

  • Auth : mêmes principes qu’en REST (ch. 9.2) — WPGraphQL supporte cookie+nonce, Application Passwords, JWT (extension). Secrets côté serveur en headless.
  • Requêtes coûteuses : GraphQL permet des requêtes profondes/imbriquées potentiellement lourdes → limiter la profondeur/complexité, cacher (Smart Cache), paginer.
  • Exposition : ne rendez visibles au schéma que les données voulues (comme show_in_rest).

✏️ Exercices

  1. Citez le principal avantage de GraphQL sur REST pour un front headless riche.
  2. Votre CPT livre n’apparaît pas dans le schéma GraphQL. Que manque-t-il ?
  3. Sur un petit site vitrine headless simple, REST natif ou WPGraphQL ? Pourquoi ?

✅ Solution

  1. Le client demande exactement les champs voulus, y compris les ressources liées (auteur, image, taxonomies), en une seule requête — pas de sur-fetching ni d’allers-retours multiples.
  2. L’exposition à GraphQL : à l’enregistrement du CPT, show_in_graphql => true avec graphql_single_name/graphql_plural_name ; pour les meta, register_graphql_field().
  3. REST natif : il suffit pour un besoin simple, sans dépendance supplémentaire à installer/maintenir, et permet des endpoints custom facilement. WPGraphQL se justifie sur des fronts riches en relations ou avec une équipe habituée à GraphQL.

🧠 Quiz de révision

1. WPGraphQL est-il natif ?

Non : c’est un plugin (à installer et maintenir).

2. Quel est l’avantage clé de GraphQL ?

Demander exactement les champs (et relations) voulus en une requête (pas de sur-fetching).

3. Sur quel endpoint répond WPGraphQL ?

Un endpoint unique /graphql (avec l’IDE GraphiQL dans l’admin).

4. Comment exposer un CPT à GraphQL ?

show_in_graphql => true + graphql_single_name/graphql_plural_name à l’enregistrement.

5. Quel risque de performance avec GraphQL ?

Des requêtes profondes/complexes coûteuses ; on limite la profondeur/complexité et on met en cache (Smart Cache).


Chapitre suivant : WordPress headless avec Next.js.