Introduction à l'API GraphQL en Java
\n\nGraphQL est un langage de requête pour 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 permet de formater les réponses de manière flexible, ce qui réduit considérablement le volume de données transmises et accélère le développement.
\n\nDans ce tutoriel, nous allons voir en pratique comment créer une API GraphQL avec Java en utilisant la bibliothèque graphql-java et le framework Spring Boot. Vous apprendrez à configurer le schéma, à écrire des résolveurs et à exécuter des requêtes.
Cet article sera utile aux développeurs Java qui souhaitent maîtriser une approche moderne de la construction d'API et améliorer l'interaction entre le client et le serveur.
\n\n1. Configuration du projet et des dépendances
\n\nPour commencer, créons un nouveau projet Spring Boot. Le plus simple est d'utiliser Spring Initializr. Ajoutons les dépendances suivantes :
\n\n- \n
- Spring Web — pour lancer le serveur web \n
- Spring Boot DevTools — pour accélérer le développement \n
- Lombok — pour réduire le code standard \n
Après avoir créé le projet, ajoutez la bibliothèque principale GraphQL dans pom.xml :
<dependency>\n <groupId>com.graphql-java</groupId>\n <artifactId>graphql-java-spring-boot-starter-webmvc</artifactId>\n <version>2021-06-30T00-00-00-1e4b5e5</version>\n</dependency>\n\nVous aurez également besoin de la bibliothèque pour utiliser l'outil GraphiQL (interface web pour tester les requêtes) :
\n\n<dependency>\n <groupId>com.graphql-java</groupId>\n <artifactId>graphiql-spring-boot-starter</artifactId>\n <version>5.0.2</version>\n</dependency>\n\nAprès avoir ajouté les dépendances, mettez à jour le projet et lancez-le. Par défaut, GraphiQL sera accessible à l'adresse http://localhost:8080/graphiql.
2. Création du modèle de données et du schéma GraphQL
\n\nPour la démonstration, créons un modèle simple Book (livre). Définissons une classe avec les champs id, title, author et pages.
import lombok.AllArgsConstructor;\nimport lombok.Data;\nimport lombok.NoArgsConstructor;\n\n@Data\n@NoArgsConstructor\n@AllArgsConstructor\npublic class Book {\n private String id;\n private String title;\n private String author;\n private int pages;\n}\n\nIl faut maintenant définir le schéma GraphQL. Créez un fichier schema.graphqls dans le dossier src/main/resources :
type Query {\n allBooks: [Book]\n bookById(id: String): Book\n}\n\ntype Book {\n id: String\n title: String\n author: String\n pages: Int\n}\n\nLe schéma décrit deux requêtes : obtenir tous les livres et obtenir un livre par son identifiant. Le type Book contient quatre champs.
\n\nPour traiter les requêtes, créons un service qui stockera les données en mémoire (pour simplifier) :
\n\nimport org.springframework.stereotype.Service;\nimport javax.annotation.PostConstruct;\nimport java.util.ArrayList;\nimport java.util.List;\nimport java.util.Optional;\n\n@Service\npublic class BookService {\n private List<Book> books = new ArrayList<>();\n\n @PostConstruct\n public void init() {\n books.add(new Book("1", "Guerre et Paix", "Léon Tolstoï", 1225));\n books.add(new Book("2", "Crime et Châtiment", "Fiodor Dostoïevski", 671));\n books.add(new Book("3", "Le Maître et Marguerite", "Mikhaïl Boulgakov", 480));\n }\n\n public List<Book> getAllBooks() {\n return books;\n }\n\n public Book getBookById(String id) {\n Optional<Boo