GraphQL Java — bibliothèque serveur pour implémenter une API GraphQL en Java
GraphQL Java est une bibliothèque serveur puissante et flexible pour implémenter la spécification GraphQL en langage Java. Elle permet aux développeurs de créer des API efficaces, typées et facilement extensibles, offrant aux clients la possibilité de demander uniquement les données nécessaires. La bibliothèque est activement maintenue par la communauté et utilisée en production par de nombreuses grandes entreprises.
Fonctionnalités principales
- Prise en charge complète de la spécification GraphQL — implémentation de tous les types, directives, mutations, abonnements et fragments.
- Système de types flexible — possibilité de définir des schémas à la fois à partir de classes Java (code-first) et via SDL (schema-first).
- Prise en charge intégrée de l'asynchrone — utilisation de
CompletableFuturepour un traitement efficace des requêtes. - DataLoader — utilitaire intégré pour résoudre le problème des requêtes N+1 et le chargement par lots des données.
- Outils de test — classes intégrées pour les tests unitaires des schémas et des résolveurs.
- Extensibilité — prise en charge des scalaires personnalisés, des directives et des outils de validation.
Architecture de la bibliothèque
La bibliothèque se compose de plusieurs composants clés :
- GraphQLSchema — objet représentant le schéma de l'API.
- DataFetcher — interface fonctionnelle pour récupérer les données (équivalent du résolveur en GraphQL).
- TypeResolver — interface pour résoudre les types polymorphes (interfaces et unions).
- ExecutionStrategy — stratégie d'exécution des requêtes (asynchrone par défaut).
- Instrumentation — mécanisme pour ajouter une logique supplémentaire (journalisation, métriques).
Exemple d'utilisation
Considérons un exemple simple de création d'un serveur GraphQL pour gérer des livres.
1. Définition du schéma via SDL
// schema.graphqlstype Query { books: [Book] bookById(id: ID!): Book}
type Book { id: ID! title: String! author: String! year: Int}2. Création des résolveurs
import graphql.schema.DataFetcher;import graphql.schema.DataFetchingEnvironment;
public class BookDataFetcher {
public static DataFetcher<List<Book>> getBooksDataFetcher() { return environment -> { // Dans une application réelle, ce serait une requête à la base de données return List.of( new Book("1", "1984", "George Orwell", 1949), new Book("2", "Brave New World", "Aldous Huxley", 1932) ); }; }
public static DataFetcher<Book> getBookByIdDataFetcher() { return environment -> { String id = environment.getArgument("id"); // Recherche du livre par ID return findBookById(id); }; }}3. Assemblage du schéma et exécution de la requête
import graphql.GraphQL;import graphql.schema.GraphQLSchema;import graphql.schema.idl.RuntimeWiring;import graphql.schema.idl.SchemaParser;import graphql.schema.idl.SchemaGenerator;import graphql.schema.idl.TypeDefinitionRegistry;
public class GraphQLExample { public static void main(String[] args) { // Chargement du SDL String schema = "type Query { books: [Book] } type Book { id: ID! title: String! }"; SchemaParser schemaParser = new SchemaParser(); TypeDefinitionRegistry typeRegistry = schemaParser.parse(schema);
// Configuration du runtime wiring RuntimeWiring wiring = RuntimeWiring.newRuntimeWiring() .type("Query", builder -> builder .dataFetcher("books", BookDataFetcher.getBooksDataFetche Aussi dans la bibliothèque
Compose Multiplatform Kotlin : guide complet avec exemples
Parsing HTML en Go (Golang) : bibliothèques et exemples de code
SFML pour C++ : guide complet avec exemples
Authentification et autorisation en Java : Spring Security et JWT