GraphQL in C# (.NET): Die Bibliotheken Hot Chocolate und GraphQL.NET zur API-Erstellung

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

GraphQL in C# (.NET): Überblick über Bibliotheken und Werkzeuge



GraphQL ist eine Abfragesprache für APIs, die es Clients ermöglicht, nur die Daten anzufordern, die sie tatsächlich benötigen. Im C# (.NET)-Ökosystem gibt es mehrere leistungsstarke Bibliotheken zur Implementierung von GraphQL-Servern und -Clients. In diesem Artikel betrachten wir die beiden beliebtesten: Hot Chocolate und GraphQL.NET. Beide Bibliotheken werden aktiv weiterentwickelt, sind Open Source und verfügen über eine hervorragende Dokumentation.



1. Hot Chocolate – Modernes Framework von ChilliCream



Hot Chocolate ist ein voll funktionsfähiges GraphQL-Framework für .NET, das sowohl Server- als auch Client-Komponenten unterstützt. Es integriert sich mit ASP.NET Core und Entity Framework Core und bietet praktische Attribute sowie automatische Schema-Generierung.



Installation und einfacher Server



Installieren Sie zunächst das Paket über NuGet:



dotnet add package HotChocolate.AspNetCore


Erstellen Sie einen einfachen GraphQL-Server:



// Datentyp definieren
public class Book
{
    public string Id { get; set; }
    public string Title { get; set; }
    public string Author { get; set; }
}

// Query-Klasse erstellen
public class Query
{
    public Book GetBook() =>
        new Book
        {
            Id = "1",
            Title = "Krieg und Frieden",
            Author = "Leo Tolstoi"
        };
}

// Konfiguration in Program.cs
var builder = WebApplication.CreateBuilder(args);
builder.Services
    .AddGraphQLServer()
    .AddQueryType<Query>();

var app = builder.Build();
app.MapGraphQL();
app.Run();


Nach dem Start ist der Server unter /graphql erreichbar. Sie können eine Abfrage über einen beliebigen GraphQL-Client senden:



{
  book {
    title
    author
  }
}


Hot Chocolate unterstützt Mutationen, Subscriptions, Filterung, Sortierung, Paginierung und die Integration mit Entity Framework über UseProjection, UseFiltering und UseSorting.



Beispiel mit einer Mutation



public class Mutation
{
    public Book AddBook(string title, string author) =>
        new Book { Id = Guid.NewGuid().ToString(), Title = title, Author = author };
}

// Registrierung
builder.Services
    .AddGraphQLServer()
    .AddQueryType<Query>()
    .AddMutationType<Mutation>();


2. GraphQL.NET – Leichtgewichtige und bewährte Bibliothek



GraphQL.NET (auch bekannt als graphql-dotnet) ist ein Port der ursprünglichen JavaScript-Implementierung von GraphQL nach C#. Es bietet manuelle Schemaerstellung über Typen und Felder, was volle Kontrolle über die API-Struktur ermöglicht.



Installation und Beispiel



dotnet add package GraphQL
dotnet add package GraphQL.SystemTextJson
dotnet add package GraphQL.Server.Transports.AspNetCore


Erstellen wir einen einfachen Server:



// Typ definieren
public class BookType : ObjectGraphType<Book>
{
    public BookType()
    {
        Field(x => x.Id);
        Field(x => x.Title);
        Field(x => x.Author);
    }
}

// Schema erstellen
public class AppSchema : Schema
{
    public AppSchema(IServiceProvider provider) : base(provider)
    {
        Query = provider.GetRequiredService<BookQuery>();
    }
}

// Query
public class BookQuery : ObjectGraphType
{
    public BookQuery()
    {
        Field<BookType>("book")
            .Resolve(context => new Book
            {
                Id = "1",
                Title = "Schuld und Sühne",
                Author = "F.M. Dostojewski"
            });
    }
}

// Konfiguration Program.cs
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddSingleton<BookQuery>();
builder.Services.AddSingleton<AppSchema>();
builder.Services.AddGraphQL(b => b.AddSystemTextJson());

var app = builder.Build();\                    

Empfehlungen