Technologie .NET - laboratorium 1
Post

Technologie .NET - laboratorium 1

Wstęp i opis

Celem laboratorium jest zapoznanie się z najpopularniejszymi rozwiązaniami technologii .Net. Podczas zajęć przedstawione zostaną podstawy:

  • tworzenia asynchronicznego web API
  • mapowania obiektowo-relacyjnego
  • Clean Architecture
  • CRUD (Create, Read, Update, Delete)
  • testów jednostkowych
  • konteneryzacji

Budowane rozwiązanie oparte zostanie na technologiach: .Net 6, EF Core 6.0, Docker, SqlLite, XUnit oraz Moq. Całość laboratoriów jak i prezentowane przykłady zostaną przedstawione na środowisku JetBrains Rider.

Wymagania

Do wykonania zadań podczas laboratoriów, wymagane jest zainstalowanie poniższych narzędzi:

  • .Net 6 SDK
  • Docker/Podman
  • Visual Studio Professional/Enterprise lub JetBrains Rider
  • Databrowser for SQLite/JetBrains DataGrip
  • Postman

Główne założenia projektu

Na zajęciach zaprojektowany oraz zaimplementowany zostanie serwis do zarządzania najmem nieruchomości. Do funkcjonalności systemu należeć będą:

  • Dodawanie nieruchomości
  • Wyświetlanie wszystkich nieruchomości
  • Wyświetlenie nieruchomości po zadanym atrybucie
  • Edycja nieruchomości
  • Usuwanie nieruchomości
  • Tworzenie konta właściciela nieruchomości
  • Edycja konta właściciela
  • Usunięcie konta właściciela
  • Tworzenie konta najemcy
  • Edycja konta najemcy
  • Usunięcie konta najemcy
  • Przypisanie konta najemcy do nieruchomości

Tworzenie projektu

Zaczynamy od uruchomienia środowiska programistycznego. Po jego załadowaniu wyświetli się panel z listą wcześniej utworzonych projektów. W okienku wybieramy New Solution.

Desktop View

W następnym oknie należy wybrać rodzaj tworzonego projektu: ASP.NET Core Web Application oraz ustawić podstawową konfigurację projektu:

  • Nazwa solucji (Solution Name): ApartmentRental.API
  • Nazwa projektu (Project Name): AparmentRental.API
  • Katalog solucji (Solution Directory)
  • SDK: 6.
  • Typ (Type): Web API
  • Framework: net6.
  • Autoryzacja (Auth): No authentication
  • Docker Support: Linux

Projekt zostanie stworzony po wciśnięciu przycisku Create

Desktop View

Struktura utworzonego projektu

Po stworzeniu nowego projektu, należy zwrócić uwagę na szkielet aplikacji, który składy się z następujących plików oraz katalogów:

  • Dependencies - zależności projektu
  • Properties - pliki konfiguracyjne
  • launchSettings.json - plik konfiguracyjny uruchomienia aplikacji ASP.NET Core^
  • Controllers - katalog z kontrolerami
  • WeatherForecastController.cs - przykładowa klasa z implementacją RESTowego kontrolera^
  • appsettings.json - plik konfiguracyjny aplikacji wykorzystywany do budowania produkcyjnego
  • appsettings.Development.json - plik konfiguracyjny aplikacji wykorzystywany do budowania deweloperskiego
  • DockerFile - plik z konfiguracją budowania kontenera Dockerowego
  • Program.cs - klasa konfiguracyjna aplikacji
  • WeatherForecast.cs - przykładowa klasa z modelem obiektu zwracanego przez WeatherForecastController.cs

Desktop View

Projekt architektury aplikacji

Czysta architektura stawia logikę biznesową i model aplikacji w centrum projektu. Zamiast uzależniać logikę biznesową od dostępu do danych lub innych kwestii związanych z infrastrukturą, zależność ta jest odwrócona: szczegóły infrastruktury i implementacji zależą od rdzenia aplikacji (Application Core). Funkcjonalność ta jest osiągana poprzez definiowanie abstrakcji lub interfejsów w rdzeniu aplikacji, które są następnie implementowane przez typy zdefiniowane w warstwie infrastruktury. Popularnym sposobem wizualizacji tej architektury jest użycie serii koncentrycznych okręgów, podobnych do cebuli (onion architecture).

Desktop View

W naszej aplikacji zdefiniujemy cztery podprojektów:

  • ApartmentRental.API
  • ApartmentRental.Core
  • ApartmentRental.Infrastructure
  • ApartmentRental.Tests

Przejdźmy do dodania wspomnianych wyżej warstw do tworzonego przez nas serwisu. Aby to zrobić, należy kliknąć prawym przyciskiem myszy na solucję i wybrać Add -> New Projects...

Desktop View

W nowym oknie wyświetli się konfiguracja nowego projektu. Z menu Templates .NET/ .NET Core należy wybrać Class Library. W Project name uzupełniamy nazwę projektu, który będzie naszą warstwą. Czynność powtarzamy dla każdej warstwy. Dodatkowo nasza aplikacja powinna zakładać posiadanie testów jednostkowych. Dodajmy do solucji kolejny projekt (Unit Test Project). Naszą główną biblioteką za pomocą której będziemy implementować testy jednostkowe będzie xUnit. Podczas tworzenia projektu z testami, framework powinien zostać zdefiniowany z pola Type.

Desktop View

Desktop View

Po stworzeniu wszystkich projektów nasza solucja powinna prezentować się następująco:

Desktop View

Projekt API który został wygenerowany podczas tworzenia solucji będzie odgrywał role interfejsu użytkownika.

Pierwsze uruchomienie serwisu

Stworzony serwis można uruchomić w dwóch trybach, w dwóch konfiguracjach oraz kilku profilach. Tryby można podzielić na tryb zwykły oraz tryb do debugowania kodu. Z kolei konfiguracje dzielą się na konfigurację debugowania (do pracy lokalnej) oraz konfigurację releasową (budującą kod w takiej formie z jaką styczność będą mieli klienci czyli tzw. produkcyjna/releasowa). Rodzaje możliwych profili, które służą do podstawowej konfiguracji uruchomienia aplikacji, można znaleźć w pliku launchSettings.json w folderze Properties. Aby uruchomić aplikację w trybie i konfiguracji debugowania należy wybrać opcje jak na załączonym niżej obrazku i kliknąć przycisk Debug :

Desktop View

Uruchomiona aplikacja powinna uruchomić się w trybie https oraz zwykłym http, na dwóch różnych portach np. https://localhost:7299 , http://localhost:5218. Informacja na których portach aplikacja się uruchomiła widoczna jest w oknie terminala bądź można ją sprawdzić w pliku launchSettings.json.

Desktop View

Pierwsze testowe zapytanie HTTP

Po stworzeniu nowego projektu wygenerowany został kontroler REST API WeatherForecastController. Posiada on zaimplementowaną metodę GET, która zwraca krótką informację o prognozie pogody.

Do przetestowania działania API, wykorzystamy narzędzie Postman. Po pobraniu i instalacji narzędzia, należy stworzyć w nim konto użytkownika. Po całej operacji, powinno nam się pojawić poniższe okno:

Desktop View

Wykonajmy teraz pierwsze zapytanie do naszego serwisu. W tym celu stworzymy sobie w narzędziu kolekcję, do której sukcesywnie podczas zajęć będziemy dodawać nowe zapytania. W Postmanie należy wybrać przycisk New, a w oknie dialogowym które pojawi się zaraz po wybraniu tego przycisku, należy wybrać Collection. Kolekcję nazwijmy tak samo jak nasz projekt - ApartmentRental.API. Klikając prawym przyciskiem myszy na kolekcję, wybierzmy Add Request , by dodać nowe zapytanie.

Desktop View

Nowe zapytanie nazwijmy Weathers. W okienku Enter request URL , należy wpisać adres naszej aplikacji, ze ścieżką która odwołuje się do naszego endpoint’a. Domyślnie w .Netcie adres ścieżki tworzony jest na podstawie atrybutu Route z parametrem dodanym do nagłówka klasy oraz atrybuty Http np. HttpGet, HttpPost itd. dodanego do nagłówka metody. W naszym przypadku, atrybut Route , przyjmuje parametr [controller] , który mapuje sufiks nazwy klasy do nazwy ścieżki. Łącząc adres z którym uruchomiła się aplikacja oraz podane atrybuty, ścieżka do wykonania zapytania będzie prezentowała się następująco: https://localhost:7299/WeatherForecast/. Wpiszmy poniższy adres, kliknijmy Send i zobaczmy co zwróci aplikacja.

Desktop View

W zakładce Body widzimy że aplikacja zwróciła nam odpowiedź - krótką prognozę pogody. Zwróćmy uwagę również na kod odpowiedzi HTTP - 200, który informuje nas o prawidłowym wykonaniu zapytania. W zakładce Headers możemy zobaczyć więcej informacji. W nagłówku odpowiedzi otrzymaliśmy informację o serwerze na którym uruchomiona jest aplikacja, dacie, formacie odpowiedzi oraz o typie kodowania transferu.

Automatyczna dokumentacja API

W stworzonym przez nas projekcie została dodana konfiguracja tworzenia automatycznej dokumentacji enepointów - Swagger. Dostępna jest ona w formie przejrzystego interfejsu z poziomu przeglądarki internetowej. Za pomocą narzędzia, możemy w szybki sposób przyjrzeć się konfiguracji naszych endpointów, jak i wysłać testowe zapytanie. Aby przejść do dokumentacji, w pasku adresu przeglądarki internetowej, należy wpisać adres: http://localhost:7299/swagger.

Ważne! Zwróć uwagę na jakim porcie wystartowała aplikacji na Twoim lokalnym środowisku!

Desktop View

Zadania

  1. Na podstawie stworzonego projektu stwórz lokalne repozytorium GIT
  2. Wystaw stworzone repozytorium na Githuba
  3. Wystawione repozytorium musi być publiczne
  4. Dodaj odpowiednie Readme.md opisujące projekt
  5. Link do stworzonego repozytorium na Githubie wyślij w wiadomości mailowej do prowadzącego. Tytuł wiadomości email powinien być w określonym formacie: [.Net][Rodzaj studiów][Nr grupy] Imię nazwisko - nr indeksu