Beispieldaten und Filterung - Erstellen einer Beispiel-API in C#
Ein wichtiges Hilfsmittel bei der Webentwicklung ist heute eine Beispiel-Web-API, mit der Sie Frontend-Webanwendungen, mobile Geräte oder sogar Softwareanwendungen testen können. In seinem ausführlichen Video "Beispieldaten und Filterung - Erstellen einer Beispiel-API in C#" führt uns Tim Corey durch die Erstellung einer C#-Web-API, die Beispieldaten aus einer JSON-Datei lädt, die Filterung einrichtet und für die Bereitstellung als Docker-Container oder herkömmliche Webanwendung vorbereitet ist.
In diesem Artikel gehen wir Schritt für Schritt auf Tims Ansatz ein und erläutern die wichtigsten Konzepte von ASP.NET Core Web API, Minimal APIs und HTTP-Diensten.
Einführung in die Beispiel-Web-API
Zu Beginn erklärt Tim, warum das Erstellen eines neuen Web-API-Projekts für Entwickler so wichtig ist. Ganz gleich, ob Sie für mobile Geräte, eine Webanwendung oder andere Softwareanwendungen entwickeln, mit einer leichtgewichtigen Beispiel-API lassen sich Tests schneller und reibungsloser durchführen.
Tim sagt, dass wir am Ende des Projekts Folgendes haben werden:
-
Eine minimale API mit ASP.NET Core und .NET Core,
-
Eine dokumentierte API mit OpenAPI (Swagger UI) Unterstützung,
-
Gesundheitschecks,
-
Simulierte Fehler und Verlangsamungen,
- Bereitstellung in einem Docker-Container und auf einem VPS-Server.
Dieses kleine Projekt wird es Entwicklern ermöglichen, auf einfache Weise mit HTTP-Diensten zu interagieren, und zwar über HTTP-Methoden wie GET, PUT, POST und DELETE.
Einrichtung des Projekts und Beispieldaten
Tim beginnt mit der Strukturierung des Web-API-Projekts in Visual Studio, der beliebten integrierten Entwicklungsumgebung von Microsoft.
Bei 1:07 erstellt Tim einen neuen Datenordner und fügt eine courseData.json-Datei hinzu. Er erwähnt, dass seine Live-Site, timcorey.com, ein ähnliches System verwendet - nur eine große JSON-Datei im Hintergrund, die als Webservice fungiert.
Die wichtigsten Punkte aus Tims Setup:
-
Verwenden Sie JSON-Dateien für Beispieldaten, damit keine Datenbank oder Entity Framework erforderlich ist.
-
Halten Sie die Container klein und vermeiden Sie zusätzliche Dienste wie SQL-Server.
- Die Daten sind nicht veränderbar - es besteht keine Notwendigkeit, Änderungen zu speichern; daten bei Bedarf einfach zurücksetzen.
Diese Wahl spiegelt die REST-Prinzipien (Representational State Transfer) für die Arbeit mit vorhandenen Ressourcen wider.
Verständnis der Kursdatenstruktur
Tim geht sorgfältig die Struktur der JSON-Beispieldatei durch:
-
ID (ganze Zahl),
-
Vorbestellung (boolesch),
-
Kurs-URL (String),
-
Kurstyp (string),
-
Name, Anzahl der Lektionen, Kurslänge in Stunden (Zahlen),
-
Beschreibung, Bild-URL,
-
Preis in USD,
- Vorschau-Link.
Tim erklärt bei 3:29, dass sich alle Preise auf US-Dollar beziehen; der Endpreis kann sich jedoch aufgrund lokaler Steuern (MwSt.) ändern.
Jedes dieser Felder wird später auf eine Modellklasse in C# abgebildet - ein grundlegendes Element bei der Erstellung von ASP.NET-Web-APIs.
Erstellung der Kursmodellklasse
Beim Einstieg in die .NET Core-Codierung erstellt Tim eine CourseModel.cs-Datei in einem neuen Models-Ordner.
Bei 4:47 verwendet er Visual Studio's "Paste Special > Paste JSON as Classes", um sofort eine Klasse basierend auf der JSON-Struktur zu erstellen. Tim weist darauf hin:
-
Korrekte PascalCase-Benennung (wichtig für C#-Web-APIs),
-
Erforderliche vs. löschbare Zeichenketten (6:02),
- Vermeiden Sie die Speicherung von Null, wo eine leere Zeichenkette ausreichen würde.
Die Erstellung einer starken Modellklasse ist entscheidend für die Datenkommunikation zwischen Clients und dem Server.
Laden von Daten in den Speicher
Tim fährt fort, indem er eine CourseData.cs-Klasse erstellt, um das Laden der Kursliste in den Speicher zu verwalten.
Wichtige Schritte:
-
Verwenden Sie System.Text.Json für die Deserialisierung,
-
Setzen Sie PropertyNameCaseInsensitive = true (8:04), um JSON-Felder in CamelCase auf C#-Felder in PascalCase zu übertragen,
-
Verwenden Sie Path.Combine (9:04) für den plattformübergreifenden Dateizugriff,
- Groß- und Kleinschreibung beim Umgang mit Linux-Servern beachten (9:59).
Die Kurse werden in eine öffentliche List
Tim bei 11:04 betont, dass bei einer fehlgeschlagenen Deserialisierung eine neue leere Liste erstellt wird, um Nullreferenzfehler zu vermeiden - eine bewährte Praxis bei der Erstellung robuster APIs.
Registrierung der Kursdaten in Dependency Injection
Als Nächstes zeigt Tim, wie man die CourseData-Klasse mit AddTransient im Dienste-Container registriert.
Er erklärt, dass die Daten zwar schreibgeschützt sind, aber durch die Verwendung eines transienten Dienstes versehentliche Änderungen vermieden werden können. Dieser Ansatz steht im Einklang mit den modernen ASP.NET Core Web API-Entwicklungsstandards.
Kursendpunkte erstellen
Um 14:03 Uhr beginnt Tim mit der Erstellung von Endpunkten für die Beispiel-API:
-
Eine GET-Methode unter /courses zum Abrufen aller Kurse,
- Eine Erweiterungsmethode AddCourseEndpoints für saubereren Code.
Dieser modulare Ansatz vereinfacht die Skalierung Ihres Web-API-Projekts - eine wesentliche Technik bei der Verwaltung großer HTTP-Dienste oder mehrerer Endpunkte.

Tim setzt auch die Start-URL auf Swagger UI, was das Testen erleichtert.
Fehlerbehebung: Datentyp-Fehlanpassungen
Beim Testen des neuen Endpunkts stößt Tim auf einen Statuscodefehler im Zusammenhang mit dem Feld CourseLengthInHours. Er weiß, dass einige Kurse Bruchteile von Stunden haben (z. B. 2,5), so dass ein Double statt eines Int erforderlich ist.
Tim korrigiert das CourseModel und zeigt, wie wichtig eine gründliche Fehlerprüfung und die Beachtung von Datentypen bei der Nutzung externer Webressourcen sind.
Verbesserung der API mit ID Lookup
Tim erweitert die Funktionalität:
-
LoadAllCourses zum Abrufen aller Kurse,
- LoadCourseById zum Auffinden eines Kurses nach ID.
Er verbessert die Fehlerbehandlung, indem er prüft, ob ein Kurs existiert. Wenn dies nicht der Fall ist, verwendet Tim return NotFound() und gibt einen entsprechenden HTTP-Statuscode an den Client zurück.
Dies entspricht den Praktiken des RESTful-Architekturstils, bei dem jede HTTP-Methode das Ergebnis der Operation klar kommuniziert.
Filterung nach Kurstyp und Suche hinzufügen
Eine einfache GET-Methode reicht nicht aus - echte Webdienste benötigen Filterfunktionen.
Tim erweitert LoadAllCourses, um Abfrageparameter zu akzeptieren:
-
courseType (string),
- suche (String).
Er erklärt, wie man optionale Parameter mit String.IsNullOrWhiteSpace sicher behandelt.
Die Filterung nach courseType verwendet RemoveAll mit String.Compare, wobei Groß- und Kleinschreibung ignoriert werden. Für die Suche nach dem Kursnamen und der Kurzbeschreibung wird .Contains mit einem Groß-/Kleinschreibung-unabhängigen Vergleich verwendet.
Tim testet Szenarien wie:
-
Filterung für "Masterkurs"
-
Suche nach "web" oder "SQL"
- Kombination von Suche und Kurstyp für verfeinerte Ergebnisse
Dies ermöglicht ein vollständig interaktives Erlebnis für Benutzer von Webanwendungen, mobilen Anwendungen oder Clients, die über HTTP kommunizieren. Ausführlichere Informationen finden Sie im vollständigen Video.
Abschließende Überlegungen und nächste Schritte
Am Ende der Lektion hat Tim eine Übersetzung erstellt:
-
Eine funktionierende ASP.NET Core Web API,
-
Filter- und Suchfunktionen,
-
Korrekte Fehlerbehandlung (NotFound, Ok, etc.),
- Unterstützung für Swagger UI und OpenAPI-Dokumentation.
Tim gibt einen Ausblick darauf, dass er sich als Nächstes mit der herkunftsübergreifenden Ressourcenfreigabe (CORS) befassen wird - eine wichtige Voraussetzung dafür, dass Internet-Clients und verschiedene Domänen ungehindert auf die API zugreifen können.
Tim schließt mit einer Ermutigung: Programmieren ist manchmal mit Hürden verbunden, aber es ist lohnend.
Abschluss
Anhand des Videos von Tim Corey können Sie ein neues Web-API-Projekt in Visual Studio erstellen, Beispieldaten laden, Endpunkte erstellen und eine leistungsstarke Filterung implementieren - alles auf der Grundlage von RESTful-Prinzipien und ASP.NET Core-Standards.
Ganz gleich, ob Sie Webseiten testen, APIs für mobile Geräte erstellen oder mit vorhandenen Ressourcen arbeiten, diese Einrichtung gewährleistet einen schnellen und zuverlässigen Zugriff auf Daten über HTTP-Methoden.
Üben Sie diese Muster in .NET Core weiter, und schon bald werden Sie robuste Webdienste erstellen, die reibungslos zwischen Clients, Servern und dem Internet kommunizieren!



