GraphQL API avec C# : Tutoriel pratique étape par étape

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Introduction : Pourquoi GraphQL et C# forment une paire idéale

\n

Le développement web moderne nécessite des API flexibles et performantes. L'API REST, malgré sa popularité, souffre souvent de over-fetching (récupération de données inutiles) et de under-fetching (nécessité de plusieurs requêtes pour obtenir des informations complètes). GraphQL résout ces problèmes en permettant au client de demander uniquement ce dont il a besoin, en une seule requête.

\n

Dans ce tutoriel, nous allons créer une API GraphQL complète en C# en utilisant la bibliothèque Hot Chocolate – l'implémentation GraphQL la plus populaire pour .NET. Vous apprendrez à configurer le serveur, définir le schéma, implémenter des requêtes (queries), des mutations (mutations) et des abonnements (subscriptions). Tous les exemples de code sont pratiques et prêts à l'emploi.

\n

À qui s'adresse ce contenu : aux développeurs .NET qui souhaitent maîtriser GraphQL, et à ceux qui recherchent une alternative à REST. Des connaissances de base en C# et ASP.NET Core seront utiles, mais pas obligatoires.

\n\n

1. Configuration du projet et installation de Hot Chocolate

\n

Création du projet ASP.NET Core

\n

Commençons par créer un nouveau projet. Ouvrez le terminal ou l'invite de commandes et exécutez :

\n
dotnet new web -n GraphQLDemo\ncd GraphQLDemo
\n

Installons maintenant le package Hot Chocolate :

\n
dotnet add package HotChocolate.AspNetCore\ndotnet add package HotChocolate.AspNetCore.Playground
\n

Le package HotChocolate.AspNetCore ajoute un middleware pour traiter les requêtes GraphQL, et HotChocolate.AspNetCore.Playground fournit un IDE intégré (GraphQL Playground) pour les tests.

\n\n

Configuration de Startup

\n

Modifiez le fichier Program.cs (ou Startup.cs pour .NET 5 et inférieur). Ajoutons une configuration de base :

\n
var builder = WebApplication.CreateBuilder(args);\n\n// Ajout des services GraphQL\nbuilder.Services\n    .AddGraphQLServer()\n    .AddQueryType<Query>()\n    .AddMutationType<Mutation>(); // ajouté plus tard\n\nvar app = builder.Build();\n\n// Ajout du middleware\napp.UseRouting();\napp.MapGraphQL(); // endpoint /graphql\napp.MapGraphQLPlayground(); // Playground accessible sur /playground\n\napp.Run();
\n

Notez que Query et Mutation sont des classes que nous allons créer plus tard. Pour l'instant, gardons uniquement Query.

\n\n

2. Création du modèle de données et de la première requête (Query)

\n

Modèle Book

\n

Créons un modèle simple de livre. Ajoutez le fichier Models/Book.cs :

\n
namespace GraphQLDemo.Models;\n\npublic class Book\n{\n    public int Id { get; set; }\n    public string Title { get; set; } = string.Empty;\n    public string Author { get; set; } = string.Empty;\n    public int Year { get; set; }\n    public decimal Price { get; set; }\n}
\n\n

Classe Query

\n

Créons maintenant la classe Query, qui contiendra les méthodes pour récupérer les données. Ajoutez le fichier GraphQL/Query.cs :

\n
using GraphQLDemo.Models;\n\nnamespace GraphQLDemo.GraphQL;\n\npublic class Query\n{\n    // Stockage temporaire des données (dans un projet réel – base de données)\n    private static readonly List<Book> Books = new()\n    {\n        new Book { Id = 1, Title = "Guerre et Paix", Author = "Léon Tolstoï", Year = 1869, Price = 29.99m },\n        new Book { Id = 2, Title = "Crime et Châtiment", Author = "Fiodor Dostoïevski", Year = 1866, Price = 24.99m },\n        new Book { Id = 3, Title = "Le Maître et Marguerite", Author = "Mikhaïl Boulgakov", Year = 1967, Price = 19.99m }\n    };\n\n    // Requête : obtenir tous les livres\n    public IQueryable<Book> GetBooks() => Books.AsQueryable();\n\n    // Requête : obtenir un livre par ID\n    public Book? GetBookById(int id) => Books.FirstOrDefault(b => b.Id == id);\n}
\n

Les méthodes qui retournent des données sont appelées resolvers. Hot Chocolate automatiquement

Blogs

Book Recommendations