GraphQL API mit C#: Schritt-für-Schritt-Tutorial in der Praxis

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

Einleitung: Warum GraphQL und C# ein ideales Paar sind

\n

Moderne Webentwicklung erfordert flexible und leistungsstarke APIs. REST-APIs leiden trotz ihrer Beliebtheit oft unter Over-Fetching (Abruf unnötiger Daten) und Under-Fetching (Notwendigkeit mehrerer Anfragen, um vollständige Informationen zu erhalten). GraphQL löst diese Probleme, indem es dem Client ermöglicht, nur das anzufragen, was er benötigt, und zwar in einer einzigen Anfrage.

\n

In diesem Tutorial erstellen wir eine vollwertige GraphQL-API mit C# unter Verwendung der Bibliothek Hot Chocolate – der beliebtesten GraphQL-Implementierung für .NET. Sie erfahren, wie Sie einen Server einrichten, ein Schema definieren, Abfragen (Queries), Mutationen (Mutations) und Subscriptions (Subscriptions) implementieren. Alle Codebeispiele sind praxisnah und einsatzbereit.

\n

Für wen ist dieses Material geeignet: für .NET-Entwickler, die GraphQL erlernen möchten, und für alle, die nach einer Alternative zu REST suchen. Grundkenntnisse in C# und ASP.NET Core sind hilfreich, aber nicht zwingend erforderlich.

\n\n

1. Projekteinrichtung und Installation von Hot Chocolate

\n

Erstellen eines ASP.NET Core-Projekts

\n

Beginnen wir mit der Erstellung eines neuen Projekts. Öffnen Sie ein Terminal oder eine Eingabeaufforderung und führen Sie Folgendes aus:

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

Installieren Sie nun das Paket Hot Chocolate:

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

Das Paket HotChocolate.AspNetCore fügt Middleware zur Verarbeitung von GraphQL-Anfragen hinzu, und HotChocolate.AspNetCore.Playground bietet eine integrierte IDE (GraphQL Playground) zum Testen.

\n\n

Startup-Konfiguration

\n

Bearbeiten Sie die Datei Program.cs (oder Startup.cs für .NET 5 und niedriger). Fügen wir eine grundlegende Konfiguration hinzu:

\n
var builder = WebApplication.CreateBuilder(args);\n\n// GraphQL-Dienste hinzufügen\nbuilder.Services\n    .AddGraphQLServer()\n    .AddQueryType<Query>()\n    .AddMutationType<Mutation>(); // fügen wir später hinzu\n\nvar app = builder.Build();\n\n// Middleware hinzufügen\napp.UseRouting();\napp.MapGraphQL(); // Endpunkt /graphql\napp.MapGraphQLPlayground(); // Playground verfügbar unter /playground\n\napp.Run();
\n

Beachten Sie: Query und Mutation sind Klassen, die wir später erstellen werden. Lassen wir vorerst nur Query übrig.

\n\n

2. Erstellung des Datenmodells und der ersten Abfrage (Query)

\n

Modell Book

\n

Erstellen wir ein einfaches Buchmodell. Fügen Sie die Datei Models/Book.cs hinzu:

\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

Klasse Query

\n

Erstellen wir nun die Klasse Query, die Methoden zum Abrufen von Daten enthält. Fügen Sie die Datei GraphQL/Query.cs hinzu:

\n
using GraphQLDemo.Models;\n\nnamespace GraphQLDemo.GraphQL;\n\npublic class Query\n{\n    // Temporärer Datenspeicher (in einem echten Projekt: Datenbank)\n    private static readonly List<Book> Books = new()\n    {\n        new Book { Id = 1, Title = "Krieg und Frieden", Author = "Leo Tolstoi", Year = 1869, Price = 29.99m },\n        new Book { Id = 2, Title = "Verbrechen und Strafe", Author = "Fjodor Dostojewski", Year = 1866, Price = 24.99m },\n        new Book { Id = 3, Title = "Der Meister und Margarita", Author = "Michail Bulgakow", Year = 1967, Price = 19.99m }\n    };\n\n    // Abfrage: alle Bücher abrufen\n    public IQueryable<Book> GetBooks() => Books.AsQueryable();\n\n    // Abfrage: ein Buch nach ID abrufen\n    public Book? GetBookById(int id) => Books.FirstOrDefault(b => b.Id == id);\n}
\n

Methoden, die Daten zurückgeben, werden als Resolver bezeichnet. Hot Chocolate automatisch

Blogs

Buchempfehlungen