GraphQL Bibliothek C# (.NET) — GraphQL.NET
GraphQL ist eine Abfragesprache für APIs, die es Clients ermöglicht, nur die Daten anzufragen, die sie wirklich benötigen. Im .NET-Ökosystem ist eine der beliebtesten Implementierungen die Bibliothek GraphQL.NET (auch bekannt als graphql-dotnet). Sie bietet leistungsstarke Werkzeuge zur Erstellung flexibler, typisierter und effizienter APIs auf der C# (.NET)-Plattform.
In diesem Artikel werden wir im Detail betrachten, wie man GraphQL.NET verwendet, die wichtigsten Konzepte erläutern und praktische Codebeispiele geben.
Was ist GraphQL.NET?
GraphQL.NET ist eine Open-Source-Bibliothek, die die GraphQL-Spezifikation für die .NET-Plattform implementiert. Sie unterstützt sowohl .NET Core als auch .NET Framework. Die wichtigsten Funktionen:
- Erstellung streng typisierter Schemata in C#.
- Unterstützung von Abfragen (Query), Mutationen (Mutation) und Subscriptions (Subscription).
- Integrierte Validierung und Ausführung von Abfragen.
- Integration mit gängigen Web-Frameworks (ASP.NET Core, Nancy und andere).
- Unterstützung von Subscriptions über WebSockets (SignalR).
Installation und Konfiguration
Um zu beginnen, installieren Sie das Paket über NuGet:
dotnet add package GraphQLdotnet add package GraphQL.SystemTextJson // für JSON-SerialisierungWenn Sie ASP.NET Core verwenden, installieren Sie zusätzlich:
dotnet add package GraphQL.Server.Transports.AspNetCoredotnet add package GraphQL.Server.Ui.Playground // integrierte UI zum TestenErstellung des ersten Schemas
GraphQL basiert auf einem Schema, das die Datentypen und verfügbaren Operationen definiert. Betrachten wir ein einfaches Beispiel – eine API zum Abrufen von Informationen über Bücher.
Schritt 1. Definieren Sie das Datenmodell:
public class Book{ public string Id { get; set; } public string Title { get; set; } public string Author { get; set; } public int Pages { get; set; }}Schritt 2. Erstellen Sie GraphQL-Typen:
public class BookType : ObjectGraphType<Book>{ public BookType() { Field(x => x.Id).Description("Buch-ID"); Field(x => x.Title).Description("Buchtitel"); Field(x => x.Author).Description("Autor"); Field(x => x.Pages).Description("Seitenanzahl"); }}Schritt 3. Definieren Sie die Stammabfrage (Query):
public class BookQuery : ObjectGraphType{ public BookQuery(IDataStore dataStore) { Field<BookType>("book") .Arguments(new QueryArguments(new QueryArgument<StringGraphType> { Name = "id" })) .Resolve(context => dataStore.GetBookById(context.GetArgument<string>("id")));
Field<ListGraphType<BookType>>("books") .Resolve(context => dataStore.GetAllBooks()); }}Schritt 4. Bauen Sie das Schema zusammen:
public class BookSchema : Schema{ public BookSchema(IServiceProvider provider) : base(provider) { Query = provider.GetRequiredService<BookQuery>(); }}Integration mit ASP.NET Core
Registrieren Sie die Dienste in Program.cs (oder Startup.cs):
builder.Services.AddGraphQL(b => b .AddSystemTextJson() .AddSchema<BookSchema>() .AddGraphTypes(typeof(BookType).Assembly));
builder.Services.AddScoped<IDataStore, InMemoryDataStore>();Fügen Sie die Middleware hinzu:
app.UseGraphQL<BookSchema>(); // Standard-Endpunkt /graphqlapp.UseGraphQLPlayground(); // UI zum Testen (optional)Ausführen einer Abfrage
Jetzt können Sie