# GraphQL

> Langage de requête pour API qui laisse le client préciser exactement les champs souhaités en une seule requête, à la différence d'une API REST où chaque endpoint renvoie une forme fixe.

- Auteur : Clément Hadrot
- Publié le : 2026-09-25
- Mis à jour le : 2026-09-25
- URL : https://wpmoderne.dev.wordpress-developpement.fr/lexique/graphql/

Avec une API REST classique, récupérer un article et le nom de son auteur demande souvent deux appels successifs (l'un vers `/posts/42`, l'autre vers `/users/7`), ou un endpoint sur mesure qui les combine. GraphQL renverse la logique : le client envoie une seule requête décrivant précisément l'arborescence de champs qu'il veut, et le serveur répond avec exactement cette forme, ni plus ni moins.

## GraphQL et WordPress

WordPress n'expose pas GraphQL nativement : son API native est REST. Pour en bénéficier, il faut une extension comme WPGraphQL, qui construit un schéma GraphQL à partir des types de contenus, taxonomies et champs personnalisés du site, exposé sur un point de terminaison unique, en général `/graphql`. C'est un choix fréquent dans les architectures « headless » où un front (Next.js, Nuxt...) consomme le contenu WordPress.

## Exemple

```
query {
  post(id: "42", idType: DATABASE_ID) {
    title
    author { node { name } }
  }
}
```

## À ne pas confondre avec

- Une base de données graphe : GraphQL est un langage de requête pour API, il ne présuppose aucune structure de stockage particulière côté serveur.
- REST, dont il n'est pas un remplacement universel : REST reste plus simple à mettre en cache via HTTP standard, GraphQL brille surtout quand les besoins du client varient beaucoup d'une page à l'autre.
- Le sur-appel («overfetching») propre à certaines API REST, que GraphQL cherche justement à éviter en laissant le client choisir les champs, au prix d'une requête plus complexe à écrire côté client.
- Un point de terminaison GraphQL mal protégé peut autoriser des requêtes très coûteuses en une seule fois (imbrications profondes) : il est courant de limiter la profondeur ou la complexité autorisée des requêtes.
