Introduction à l'API GraphQL en Java
GraphQL est un langage de requête moderne pour les API qui permet aux clients de demander uniquement les données dont ils ont réellement besoin. Contrairement à REST, où la structure de la réponse est fixe, GraphQL offre flexibilité et efficacité. Dans ce tutoriel étape par étape, nous allons créer une API GraphQL complète en Java en utilisant la bibliothèque populaire graphql-java et Spring Boot. Vous apprendrez à configurer le serveur, définir le schéma, écrire des résolveurs et exécuter des requêtes. Tous les exemples de code sont prêts à être exécutés.
Ce que vous allez apprendre
- Comment configurer un projet Spring Boot pour GraphQL
- Comment définir un schéma GraphQL (types, requêtes, mutations)
- Comment écrire des résolveurs en Java
- Comment exécuter des requêtes query et mutation
1. Configuration du projet et dépendances
Pour commencer, créons un projet Spring Boot avec Maven. Ajoutons les dépendances nécessaires dans pom.xml :
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.graphql-java</groupId> <artifactId>graphql-spring-boot-starter</artifactId> <version>5.0.2</version> </dependency> <dependency> <groupId>com.graphql-java</groupId> <artifactId>graphql-java-tools</artifactId> <version>5.2.4</version> </dependency></dependencies>Ces bibliothèques assurent l'intégration de GraphQL avec Spring Boot et facilitent le travail avec les schémas. Après avoir ajouté les dépendances, mettez à jour le projet.
Structure du projet
Notre projet contiendra les composants principaux suivants :
- Schéma GraphQL (fichier
schema.graphqls) - Modèles de données (POJO Java)
- Résolveurs (gestionnaires de requêtes)
- Contrôleur pour les tests
2. Définition du schéma GraphQL
Créez le fichier src/main/resources/schema.graphqls. Nous y décrirons les types de données et les opérations disponibles. Prenons comme exemple le modèle "Livre" :
type Book { id: ID! title: String! author: String! year: Int}
type Query { getBook(id: ID!): Book getAllBooks: [Book]}
type Mutation { addBook(title: String!, author: String!, year: Int): Book}Ici, Book est un type objet avec des champs obligatoires (!). Query définit les points d'entrée pour la lecture des données, et Mutation pour la modification. Notez : dans GraphQL, les mutations sont utilisées pour créer, mettre à jour et supprimer des données.
3. Création des modèles Java et des résolveurs
Modèle Book
Créons une classe POJO simple Book.java :
public class Book { private String id; private String title; private String author; private int year;
public Book(String id, String title, String author, int year) { this.id = id; this.title = title; this.author = author; this.year = year; }
// getters et setters public String getId() { return id; } public String getTitle() { return title; } public String getAuthor() { return author; } public int getYear() { return year; }}Résolveur pour Query
Les résolveurs lient le schéma aux données. Créons la classe QueryResolver.java :
import com.coxautodev.graphql.tools.GraphQLQueryResolver;import org.springframework.stereotype.Component;import java.util.*;
@Componentpublic class QueryResolver implements GraphQLQueryResolver {
private final List<Book