Introduction à GraphQL sur la plateforme .NET
GraphQL est un langage de requête pour les API qui permet aux clients d'obtenir uniquement les données dont ils ont réellement besoin. Contrairement à REST, où la structure de la réponse est strictement définie par le serveur, GraphQL permet de formuler des requêtes de manière flexible. Dans ce tutoriel, nous allons créer une API GraphQL complète en C# en utilisant le framework Hot Chocolate — la solution la plus populaire pour .NET.
Nous parcourrons le chemin allant de l'installation à la création de requêtes complexes avec des mutations et des abonnements. Cet article est destiné aux développeurs familiers avec les bases de C# et d'ASP.NET Core.
1. Configuration du projet et installation des dépendances
Pour commencer, créons un nouveau projet ASP.NET Core. Vous pouvez utiliser Visual Studio, Rider ou la ligne de commande.
dotnet new web -n GraphQLDemocd GraphQLDemoInstallons maintenant le package Hot Chocolate — l'outil principal pour travailler avec GraphQL dans .NET :
dotnet add package HotChocolate.AspNetCoreDe plus, pour travailler avec les requêtes via l'IDE GraphQL (Banana Cake Pop), installons :
dotnet add package HotChocolate.AspNetCore.Playground1.1 Configuration de base de Program.cs
Ouvrez le fichier Program.cs et configurez les services :
var builder = WebApplication.CreateBuilder(args);
builder.Services .AddGraphQLServer() .AddQueryType<Query>();
var app = builder.Build();
app.MapGraphQL();
app.Run();Notez que nous enregistrons Query — c'est notre type racine pour la lecture des données. Pour l'instant, il est vide, mais nous allons le remplir.
2. Création du modèle de données et de la première requête
GraphQL fonctionne avec des types. Créons un modèle simple Book :
public class Book{ public int Id { get; set; } public string Title { get; set; } public string Author { get; set; } public int Year { get; set; }}Définissons maintenant la classe Query, qui retournera les données :
public class Query{ private static List<Book> _books = new() { new Book { Id = 1, Title = "1984", Author = "George Orwell", Year = 1949 }, new Book { Id = 2, Title = "Clean Code", Author = "Robert C. Martin", Year = 2008 } };
public IQueryable<Book> GetBooks() => _books.AsQueryable();
public Book? GetBookById(int id) => _books.FirstOrDefault(b => b.Id == id);}Lancez l'application et ouvrez http://localhost:5000/graphql. Vous verrez Banana Cake Pop — l'IDE intégré pour tester les requêtes. Essayez d'exécuter :
{ books { title author }}Vous obtiendrez uniquement les champs que vous avez demandés — c'est la puissance de GraphQL.
3. Mutations pour modifier les données
Les mutations sont l'équivalent des POST/PUT/DELETE dans REST. Elles permettent de modifier les données sur le serveur. Ajoutons la possibilité d'ajouter de nouveaux livres.
3.1 Définition du type d'entrée
Créons une classe pour les données d'entrée de la mutation :
public class AddBookInput{ public string Title { get; set; } public string Author { get; set; } public int Year { get; set; }}3.2 Implémentation de la mutation
Ajoutons la classe Mutation :
public class Mutation{ private static List<Book> _books = new() { new Book { Id = 1, Title = "1984", Author = "George Orwell", Year = 1949 }, new Book { Id = 2, Title = "Clean Code", Author = "Robert C. Martin", Year = 2008 } };
public Book AddBook(AddBookInput input) { var newBook = new Book { Id = _books.Max(b => b.Id) + 1, Title = input.Title, Author = input.Author, Year = input.Year }; _books.Add(newBook); return newBook; }