Dane przykładowe i filtrowanie — tworzenie przykładowego interfejsu API w języku C#
Podczas pracy z dzisiejszym rozwojem aplikacji webowych, ważnym narzędziem jest przykładowe Web API — coś, co można użyć do testowania frontendowych aplikacji webowych, urządzeń mobilnych, a nawet aplikacji programowych. W swoim szczegółowym filmie na temat "Danych przykładowych i filtrowania - Tworzenie przykładowego API w C#", Tim Corey przeprowadza nas przez tworzenie C# Web API, które ładuje próbne dane z pliku JSON, ustawia filtrowanie i jest przygotowane do wdrożenia jako kontener Docker lub tradycyjna aplikacja webowa.
W tym artykułe omówimy podejście Tima krok po kroku, wyjaśniając główne pojęcia od ASP.NET Core Web API, Minimal APIs, oraz usług HTTP.
Wprowadzenie do przykładowego Web API
Tim rozpoczyna od wyjaśnienia, dłączego tworzenie nowego projektu Web API jest tak ważne dla programistów. Niezależnie od tego, czy tworzysz dla urządzeń mobilnych, aplikacji webowych, czy innych aplikacji programowych, posiadanie lekkiego przykładowego API sprawia, że testowanie jest szybsze i płynniejsze.
Tim stwierdza, że na końcu projektu będziemy mieli:
-
Minimalne API używające ASP.NET Core i .NET Core,
-
Udokumentówane API z wsparciem OpenAPI (Swagger UI),
-
Kontrole zdrowia,
-
Symulowane błędy i spowolnienia,
- Wdrożenie w kontenerze Docker oraz na serwerze VPS.
Ten mały projekt umożliwi programistom łatwą interakcję z usługami HTTP, poprzez metody HTTP takie jak GET, PUT, POST i DELETE.
Konfiguracja projektu i danych próbnych
Tim zaczyna od strukturyzowania projektu Web API w Visual Studio, popularnym zintegrowanym środowisku programistycznym firmy Microsoft.
O godzinie 1:07 Tim tworzy nowy folder Data i dodaje plik courseData.json. Wspomina, że jego strona na żywo, timcorey.com, używa podobnego systemu — po prostu dużego pliku JSON za kulisami, działającego jako serwis webowy.
Kluczowe punkty z konfiguracji Tima:
-
Wykorzystaj pliki JSON dla danych próbnych, aby uniknąć potrzeby bazy danych lub Entity Framework.
-
Utrzymuj małe kontenery poprzez unikanie dodatkowych usług, takich jak serwery SQL.
- Dane nie są zmienne — nie ma potrzeby przechowywania zmian; po prostu resetuj dane, kiedy to potrzebne.
Ten wybór odzwierciedla zasady REST (Representational State Transfer) w pracy z istniejącymi zasobami.
Zrozumienie struktury danych kursu
Tim starannie przechodzi przez strukturę próbnego pliku JSON:
-
ID (liczba całkowita),
-
PreOrder (wartość logiczna),
-
URL Kursu (ciąg znaków),
-
Typ Kursu (ciąg znaków),
-
Nazwa, Liczba Lekcji, Długość Kursu w godzinach (liczby),
-
Opis, URL Obrazu,
-
Cena w USD,
- Link do podglądu.
Tim wyjaśnia o godzinie 3:29, że wszystkie ceny są oparte na dolarach amerykańskich; jednak lokalne podatki (VAT) mogą zmieniać ostateczną cenę.
Każde z tych pól później mapuje się do klasy modelu w C# — podstawowego elementu w budowie ASP.NET Web APIs.
Tworzenie klasy modelu kursu
Przechodząc do kodowania w .NET Core, Tim tworzy plik CourseModel.cs w nowym folderze Models.
O godzinie 4:47 używa Visual Studio funkcji "Wklej jako klasy JSON", aby natychmiast tworzyć klasę na podstawie struktury JSON. Tim zwraca uwagę na:
-
Prawidłowe nazewnictwo w PascalCase (ważne dla C# web APIs),
-
Wymagane vs nullable strings (6:02),
- Unikanie przechowywania null, gdzie wystarczy pusty ciąg znaków.
Tworzenie mocnej klasy modelu jest kluczowe dla umożliwienia komunikacji danych między klientami a serwerem.
Ładowanie danych do pamięci
Tim kontynuuje tworzeniem klasy CourseData.cs do zarządzania ładowaniem listy kursów do pamięci.
Kluczowe kroki:
-
Użycie System.Text.Json do deserializacji,
-
Ustalenie PropertyNameCaseInsensitive = true (8:04), aby mapować camelCase JSON do pól PascalCase w C#,
-
Użycie Path.Combine (9:04) dla dostępu do plików między platformami,
- Zapewnienie wrażliwości na wielkość liter przy pracy z serwerami Linux (9:59).
Kursy są ładowane do publicznego programu Lista<Kurs Modelów>, zapewniając szybki dostęp bez powtarzalnych zapytań do bazy danych.
Tim o godz. 11:04 podkreśla, że jeśli deserializacja zawiedzie, tworzona jest nowa pusta lista, aby zapobiec błędom odniesienia null — to najlepsza praktyka przy budowaniu solidnych APIs.
Rejestrowanie danych kursu w zależności do wstrzyknięcia
Następnie Tim pokazuje, jak zarejestrować klasę CourseData, używając AddTransient w kontenerze usług.
Wyjaśnia, że mimo że dane są tylko do odczytu, użycie usługi przejściowej unika problemów z przypadkową modyfikacją. To podejście jest zgodne z nowoczesnymi standardami ASP.NET Core Web API.
Tworzenie punktów końcowych kursu
O godzinie 14:03 Tim rozpoczyna budowę punktów końcowych dla przykładowego API:
-
Metoda GET przy /courses, aby pobrać wszystkie kursy,
- Metoda rozszerzająca AddCourseEndpoints dla czystszego kodu.
Ten modułowy sposób upraszcza skalowanie projektu Web API — to podstawowa technika przy zarządzaniu dużymi usługami HTTP lub wieloma punktami końcowymi.

Tim również ustawia początkowy URL jako Swagger UI, co ułatwia testowanie.
Rozwiązywanie problemów: Niezgodności typów danych
Podczas testowania nowego punktu końcowego, Tim napotyka błąd kodu statusu związany z polem CourseLengthInHours. Uświadamia sobie, że niektóre kursy mają ułamkowe godziny (jak 2.5), wymagając wartości double zamiast int.
Tim poprawia CourseModel, demonstrując wartość dokładnego sprawdzania błędów i respektowania typów danych przy konsumowaniu zewnętrznych zasobów webowych.
Ulepszanie API z ID Lookup
Tim rozszerza funkcjonalność:
-
LoadAllCourses do pobierania wszystkich kursów,
- LoadCourseById do znalezienia kursu według ID.
Polepsza obsługę błędów, sprawdzając, czy kurs istnieje. Jeśli nie, Tim używa return NotFound() — powracając odpowiedni kod statusu HTTP do klienta.
To jest zgodne z praktykami stylu architektonicznego RESTful, gdzie każda metoda HTTP jasno komunikuje wynik operacji.
Dodawanie filtrowania według typu kursu i wyszukiwania
Prosta metoda GET nie wystarczy — prawdziwe usługi webowe potrzebują zdolności do filtrowania.
Tim polepsza LoadAllCourses, aby przyjmować parametry zapytań:
-
courseType (ciąg znaków),
- search (ciąg znaków).
Wyjaśnia, jak bezpiecznie obsługiwać opcjonalne parametry przy użyciu String.IsNullOrWhiteSpace.
Filtrowanie według courseType używa RemoveAll z String.Compare, ignorując różnice wielkości liter. Przeszukiwanie nazwy kursu i krótkiego opisu używa .Contains z porównaniem nieczułym na wielkość liter.
Tim testuje scenariusze jak:
-
Filtrowanie dla "Kurs Mistrzowski"
-
Wyszukiwanie "web" lub "SQL"
- Łączenie wyszukiwania i typu kursu dla dopracowanych wyników
To zapewnia w pełni interaktywne doświadczenie dla użytkowników poprzez aplikacje webowe, mobilne lub klientów komunikujących się przez HTTP. Aby uzyskać więcej szczegółowych informacji, prosimy o zapoznanie się z pełnym filmem.
Ostateczne myśli i następne kroki
Na końcu lekcji, Tim stworzył:
-
Działające ASP.NET Core Web API,
-
Zdolności filtrowania i wyszukiwania,
-
Właściwą obsługę błędów (NotFound, Ok, itp.),
- Wsparcie dla dokumentacji Swagger UI i OpenAPI.
Tim zapowiada, że następnie zajmie się Cross-Origin Resource Sharing (CORS) — krytyczne dla umożliwienia klientom internetowym z różnych domen dostęp do API swobodnie.
Tim kończy z zachętą: programowanie czasami wymaga pokonywania przeszkód, ale jest satysfakcjonujące.
Wnioski
Podążając za filmem "Programowanie w .NET Core", możesz stworzyć nowy projekt Web API w Visual Studio, załadować dane przykładowe, zbudować punkty końcowe i wdrożyć potężne filtrowanie — wszystko oparte na zasadach RESTful i standardach ASP.NET Core.
Niezależnie od tego, czy testujesz strony internetowe, tworzysz API dla urządzeń mobilnych, czy pracujesz z istniejącymi zasobami, ta konfiguracja zapewnia szybki, niezawodny dostęp do danych za pomocą metod HTTP.
Kontynuuj ćwiczenia tych wzorców w .NET Core, a wkrótce będziesz tworzyć solidne usługi webowe, które komunikują się płynnie między klientami, serwerami a internetem!



