Bibliothèque GraphQL pour C# (.NET) : GraphQL.NET
GraphQL est un langage de requête moderne pour les API, qui permet aux clients de demander uniquement les données nécessaires, réduisant ainsi la redondance et accélérant le fonctionnement des applications. Pour la plateforme .NET, il existe une puissante bibliothèque GraphQL.NET qui permet aux développeurs C# de créer des parties serveur entièrement compatibles avec la spécification GraphQL. Dans cet article, nous allons détailler ses fonctionnalités, ses avantages et fournir des exemples pratiques.
Qu'est-ce que GraphQL.NET ?
GraphQL.NET est une bibliothèque open-source pour C# (.NET) implémentant la spécification GraphQL. Elle fournit des outils pour définir des schémas (types, requêtes, mutations et abonnements), traiter les requêtes entrantes, valider et exécuter la logique. La bibliothèque est activement maintenue par la communauté et utilisée dans des environnements de production.
Caractéristiques clés :
- Définition flexible du schéma — types, interfaces, types union et énumérations.
- Prise en charge des requêtes (Query), mutations (Mutation) et abonnements (Subscription).
- Intégration avec les conteneurs DI (par exemple, Microsoft.Extensions.DependencyInjection).
- Validation et analyse des requêtes côté serveur.
- Prise en charge de DataLoader pour optimiser les requêtes N+1.
- Outils de test et de débogage.
Installation et configuration
L'installation se fait via le gestionnaire de packages NuGet. Exécutez la commande :
dotnet add package GraphQLdotnet add package GraphQL.SystemTextJsonPour ASP.NET Core, vous aurez également besoin du package middleware :
dotnet add package GraphQL.Server.Transports.AspNetCoreCréation d'une API GraphQL simple
1. Définition des types de données
Créez d'abord un modèle de données et le type GraphQL correspondant :
public class Book{ public int Id { get; set; } public string Title { get; set; } public string Author { get; set; }}
public class BookType : ObjectType<Book>{ protected override void Configure(IObjectTypeDescriptor<Book> descriptor) { descriptor.Field(b => b.Id).Type<NonNullType<IntType>>(); descriptor.Field(b => b.Title).Type<NonNullType<StringType>>(); descriptor.Field(b => b.Author).Type<StringType>(); }}2. Définition des requêtes (Query)
Créez maintenant la classe Query qui gérera les requêtes :
public class Query{ private readonly List<Book> _books = new() { new Book { Id = 1, Title = "1984", Author = "George Orwell" }, new Book { Id = 2, Title = "Brave New World", Author = "Aldous Huxley" } };
public Book GetBook(int id) { return _books.FirstOrDefault(b => b.Id == id); }
public List<Book> GetBooks() { return _books; }}Ensuite, enregistrez cette classe dans le schéma :
public class BookSchema : Schema{ public BookSchema(IServiceProvider provider) : base(provider) { Query = provider.GetRequiredService<Query>(); }}3. Configuration dans Startup.cs
Ajoutez les services et le middleware dans ASP.NET Core :
public void ConfigureServices(IServiceCollection services){ services.AddGraphQL(builder => builder .AddSchema<BookSchema>() .AddSystemTextJson());}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env){ app.UseGraphQL<BookSchema>(); app.UseGraphQLPlayground(); // Pour les tests}Mutations (Mutation) pour modifier les données
Ajoutons la possibilité d'ajouter des livres via des mutations :
Aussi dans la bibliothèque
Géolocalisation et cartes en Go (Golang) : bibliothèques et exemples
Internationalisation (i18n) en Kotlin : Guide complet avec exemples
Twig pour PHP : guide complet avec exemples
Programmation réactive en Kotlin : bibliothèque RxKotlin et coroutines