Einführung in GraphQL mit C#
GraphQL ist eine Abfragesprache für APIs, die von Facebook entwickelt wurde und Clients die Möglichkeit gibt, nur die Daten anzufragen, die sie benötigen. Im Gegensatz zu REST, wo Endpunkte festgelegt sind, ermöglicht GraphQL eine flexible Gestaltung der Serverantworten. In diesem Tutorial erstellen wir eine vollständige GraphQL API mit C# unter Verwendung der Bibliothek Hot Chocolate – der beliebtesten Lösung für .NET.
Wir gehen den Weg von der Installation bis zur Implementierung von Abfragen, Mutationen und Abonnements. Am Ende des Artikels können Sie selbstständig einen GraphQL-Server mit C# bereitstellen und in Ihre Projekte integrieren.
1. Installation und Einrichtung des Projekts
Zunächst erstellen wir ein neues ASP.NET Core-Projekt. Stellen Sie sicher, dass Sie das .NET SDK (Version 6.0 oder höher) installiert haben. Öffnen Sie ein Terminal oder eine Eingabeaufforderung und führen Sie Folgendes aus:
dotnet new web -n GraphQLDemocd GraphQLDemoInstallieren Sie nun das Hot Chocolate-Paket:
dotnet add package HotChocolate.AspNetCoredotnet add package HotChocolate.AspNetCore.PlaygroundÖffnen Sie nach der Installation die Datei Program.cs und konfigurieren Sie den Server:
using Microsoft.AspNetCore.Builder;using Microsoft.Extensions.DependencyInjection;
var builder = WebApplication.CreateBuilder(args);
// GraphQL-Dienste hinzufügenbuilder.Services .AddGraphQLServer() .AddQueryType<Query>();
var app = builder.Build();
// GraphQL Middleware einbindenapp.MapGraphQL();
// Playground zum Testen hinzufügenapp.UsePlayground();
app.Run();Erstellen Sie nun eine einfache Klasse Query in einer separaten Datei Query.cs:
public class Query{ public string Hello() => "Hallo, GraphQL-Welt!";}Starten Sie das Projekt mit dem Befehl dotnet run und öffnen Sie den Browser unter http://localhost:5000/graphql. Sie sehen die Playground-Oberfläche, in der Sie eine Abfrage ausführen können:
{ hello}Antwort: { "data": { "hello": "Hallo, GraphQL-Welt!" } }
2. Erstellen von Typen und Abfragen
GraphQL ist stark typisiert. In C# verwenden wir Klassen zur Definition von Typen. Erstellen wir ein Modell Book und Author:
public class Book{ public int Id { get; set; } public string Title { get; set; } public Author Author { get; set; }}
public class Author{ public int Id { get; set; } public string Name { get; set; } public List<Book> Books { get; set; }}Fügen Sie nun einen Datenspeicher hinzu (in einem echten Projekt verwenden Sie eine Datenbank) und erweitern Sie die Klasse Query:
public class Query{ private static List<Author> _authors = new() { new Author { Id = 1, Name = "Leo Tolstoi", Books = new List<Book> { new Book { Id = 1, Title = "Krieg und Frieden", Author = null }, new Book { Id = 2, Title = "Anna Karenina", Author = null } } }, new Author { Id = 2, Name = "Fjodor Dostojewski", Books = new List<Book> { new Book { Id = 3, Title = "Verbrechen und Strafe", Author = null } } } };
public List<Author> GetAuthors() => _authors;
public Author GetAuthor(int id) => _authors.FirstOrDefault(a => a.Id == id); public List<Book> GetBooks() => _authors.SelectMany(a => a.Books).ToList();}Beachten Sie: Wir haben die Typen nicht explizit konfiguriert – Hot Chocolate generiert automatisch ein Schema basierend auf den C#-Klassen. Jetzt können Sie Abfragen ausführen:
{ authors { id name books { title } }}