Introduction à GraphQL avec C#
GraphQL est un langage de requête pour API, développé par Facebook, qui permet aux clients de demander uniquement les données dont ils ont besoin. Contrairement à REST, où les points de terminaison sont fixes, GraphQL permet de former de manière flexible les réponses du serveur. Dans ce tutoriel, nous allons créer une API GraphQL complète en C# en utilisant la bibliothèque Hot Chocolate – la solution la plus populaire pour .NET.
Nous parcourrons le chemin de l'installation à la mise en œuvre des requêtes, mutations et abonnements. À la fin de cet article, vous serez capable de déployer vous-même un serveur GraphQL en C# et de l'intégrer dans vos projets.
1. Installation et configuration du projet
Pour commencer, créons un nouveau projet ASP.NET Core. Assurez-vous que le SDK .NET (version 6.0 ou supérieure) est installé. Ouvrez le terminal ou l'invite de commandes et exécutez :
dotnet new web -n GraphQLDemocd GraphQLDemoInstallez maintenant le package Hot Chocolate :
dotnet add package HotChocolate.AspNetCoredotnet add package HotChocolate.AspNetCore.PlaygroundAprès l'installation, ouvrez le fichier Program.cs et configurez le serveur :
using Microsoft.AspNetCore.Builder;using Microsoft.Extensions.DependencyInjection;
var builder = WebApplication.CreateBuilder(args);
// Ajout des services GraphQLbuilder.Services .AddGraphQLServer() .AddQueryType<Query>();
var app = builder.Build();
// Connexion du middleware GraphQLapp.MapGraphQL();
// Ajout de Playground pour les testsapp.UsePlayground();
app.Run();Créez maintenant une classe simple Query dans un fichier séparé Query.cs :
public class Query{ public string Hello() => "Bonjour, monde GraphQL !";}Lancez le projet avec la commande dotnet run et ouvrez le navigateur à l'adresse http://localhost:5000/graphql. Vous verrez l'interface Playground, où vous pouvez exécuter la requête :
{ hello}Réponse : { "data": { "hello": "Bonjour, monde GraphQL !" } }
2. Création des types et des requêtes
GraphQL est fortement typé. En C#, nous utilisons des classes pour définir les types. Créons les modèles Book et Author :
public class Book{ public int Id { get; set; } public string Title { get; set; } public Author Author { get; set; }}
public class Author{ public int Id { get; set; } public string Name { get; set; } public List<Book> Books { get; set; }}Ajoutons maintenant un stockage de données (dans un projet réel, utilisez une base de données) et étendons la classe Query :
public class Query{ private static List<Author> _authors = new() { new Author { Id = 1, Name = "Léon Tolstoï", Books = new List<Book> { new Book { Id = 1, Title = "Guerre et Paix", Author = null }, new Book { Id = 2, Title = "Anna Karénine", Author = null } } }, new Author { Id = 2, Name = "Fiodor Dostoïevski", Books = new List<Book> { new Book { Id = 3, Title = "Crime et Châtiment", Author = null } } } };
public List<Author> GetAuthors() => _authors;
public Author GetAuthor(int id) => _authors.FirstOrDefault(a => a.Id == id); public List<Book> GetBooks() => _authors.SelectMany(a => a.Books).ToList();}Remarque : nous n'avons pas configuré explicitement les types — Hot Chocolate génère automatiquement le schéma à partir des classes C#. Vous pouvez maintenant exécuter des requêtes :
{ authors { id name books { title } }}