Przejdź do głównej zawartości

WebApi na Linux przy użyciu .NET Core


W tym artykule opiszę jak stworzyć API przechowujące listę zakupów w oparciu o ASP.NET Core na platformę Linux.


Opis API

APIOpisOdpowiedz
GET /api/listazakupowPobierz wszystkieTablica elementu
GET /api/listazakupow/{id}Pobierz konkretny elementElement
POST /api/listazakupowDodaj nowy elementElement
PUT /api/listazakupowZaktualizuj istniejący elementElement
DELETE /api/listazakupow/{id}Usuń istniejący elementInformacja czy się udało usunąć

Co to ASP.NET Core

Jest to nowoczesny Framework do tworzenia aplikacji zarówno desktopowych, jak i internetowych. Core jest tworzone w idei otwartego oprogramowania – całe repozytorium kodu jest dostępne za darmo na GitHub. ASP .NET Core jest wieloplatformowy, co oznacza, że możemy tworzyć i uruchamiać aplikacje na wielu różnych systemach operacyjnych, takich jak Windows, Mac OS X i Linux.

Wymagania

Aby rozpocząć pracę nad naszym API potrzebujemy komputera lub maszyny wirtualnej z zainstalowanym Linuxem. Na rynku istnieje wiele dystrybucji Linuxa, jednak wśród nich warto wyróżnić Ubuntu, który jest zarówno bardzo prosty w obsłudze, jak i przyjazny programistom.
Na naszej maszynie musimy zainstalować następujące oprogramowanie:

Tworzenie projektu

Aby utworzyć projekt otwieramy terminal i wywołujemy poniższe polecenia. Najpierw musimy utworzyć folder projektu i do niego przejść:
mkdir ListaZakupowApi
cd ListaZakupowApi

Następnie tworzymy solucje za pomocą komendy dotnet new webapi i przebudowujemy ją za pomocą komendy dotnet restore:
dotnet new webapi
dotnet restore

 
 1-1.jpg

Pierwsze uruchomienie

Aby uruchomić nasze nowo powstałe API wywołujemy komendę:
dotnet run

2.JPG


Po odwiedzeniu strony localhost:5000/api/values powinino nam się wyświetlić [„value1”,”value2”].
 
3.jpg
Jeżeli widzimy tę frazę, to znaczy, że nasze API działa.

Dodanie Entity Framework Core

Następnie uruchamiamy Visual Studio Code i otwieramy za jego pomocą folder ListaZakupowApi.
Następnie dodajemy linijkę odpowiedzialną za Entity w pliku ListaZakupowApi.csproj w sekcji ItemGroup, która odpowiada za PackageReference:
<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="2.0.0" />

4.jpg

Po dodaniu referencji musimy przywrócić pakiety naszej aplikacji za pomocą komendy w konsoli:
dotnet restore

Model danych

Musimy stworzyć klasę, która będzie reprezentować dane, którymi będziemy manipulować w tworzonym API. W modelu musimy przechowywać:
  • Identyfikator
  • Nazwę produktu
  • Ilość
Musimy utworzyć folder Models, w którym stworzymy naszą klasę.

5.jpg

Komunikacja z bazą danych

Następnie trzeba stworzyć klasę ListaZakupowContext, która będzie dziedziczyć po DbContext. Klasa DbContext jest odpowiedzialna za komunikację z bazą danych. W katalogu Models dodajemy plik ListaZakupowContext.cs.
6.png

Rejestrowanie

Następnie trzeba zarejestrować ListaZakupowContext w pliku Startup.cs. Musimy dodać referencje do Entity i do klas utworzonych w katalogu Models. Aby to zrobić, przed namespace musimy dodać:
using Microsoft.EntityFrameworkCore;
using ListaZakupow.Models

Następnie w metodzie ConfigureServices dodamy:
services.AddDbContext<TodoContext>(_ => _.UseInMemoryDatabase());
7-1.jpg

Dodanie nowego kontrolera

W folderze Controllers należy utworzyć nową klasę ListaZakupowController. Następnie trzeba utworzyć kontruktor, który będzie inicjalizował komunikację z bazą danych. Dla ułatwienia testowania dodałem fragment kodu, który tworzy rekord w bazie danych, jeżeli liczba zakupów jest pusta. Nasza baza jest trzymana w pamięci, więc po każdym ponownym uruchomieniu aplikacji będzie ona zerowana.
Następnie dodajemy dwie metody:
  • GetAll – która zwróci nam listę wszystkich zakupów
  • GetById z parametrem id, która zwróci nam tylko jeden, konkretny element.
8.JPG
Po uruchomieniu aplikacji i wejściu pod adres localhost:5000\api\listazakupow powinniśmy otrzymać listę wszystkich zakupów w formie tablicy JSON.

Implementacja pozostałych operacji CRUD

Następnie trzeba dodać metody:
  • Create – odpowiedzialna za tworzenie nowego obiektu
  • Update – odpowiedzialna za aktualizacje obiektu
  • Delete – odpowiedzialna za usuwanie obiektu

Create

Najpierw tworzymy metodę Create z atrybutem [HttpPost], której parametrami będzie obiekt klasy Zakup. Metoda sprawdza, czy ten obiekt nie jest pusty. Jeżeli nie jest pusty, wtedy dodaje go do bazy danych i wywołuje metodę GetById, a jako parametr przyjmuje id nowododanego obiektu.
10-1.JPG
Dzięki wtyczce do Google Chrome – Postman – możemy z łatwością przetestować nową metodę.
Trzeba ustawić adres naszego kontrolera. Następnie zmienimy typ zapytania na POST, w sekcji Body wybieramy Raw i zmieniamy typ danych na JSON.
W zapytaniu tworzymy JSON z danymi nowego obiektu zakupy:
{
      „name”: „Masło”,
      „count”: 1
}

Następnie klikamy przycisk Send. W odpowiedzi powinniśmy dostać nowy element dodany do bazy danych.
11-1.JPG

Update

Tworzymy metodę Update z atrybutem [HttpPut(„id”)] z parametrami id i obiektem zakup. Metoda ta sprawdzać będzie, czy obiekt nie jest pusty i czy w bazie danych istnieje rekord o podanym w parametrze identyfikatorze. Jeżeli tak, to zaktualizuje ten rekord i zwróci 204 – No Content.
12-1.JPG
Aby przetestować nowo powstałą metodę uruchamiamy Postmana. Trzeba ustawić adres naszego kontrolera. Pamiętajmy, że musimy podać id – w tym przypadku adres będzie wyglądał tak:
localhost:5000/api/listazakupow/1
Następnie zmienimy typ zapytania na PUT, w sekcji Body wybieramy Raw i zmieniamy typ danych na JSON.
W zapytaniu tworzymy JSON z danymi nowego obiektu zakupy:
{
      „id”: 1,
      „name”: „Masło”,
      „count”: 1
}

Następnie klikamy przycisk Send. Jeżeli wszystko poprawnie się wykonało, to powinno nam zwrócić 204 No Content. Aby mieć pewność, że wszystko działa poprawnie, można wejść na stronę localhost:5000\api\listazakupow i upewnić się, że odpowiedni rekord został zaktualizowany.
13-1.JPG

Delete

Tworzymy metodę Delete z atrybutem [HttpDelete(„id”)], dla której jako parametr wchodzi id obiektu, który chcemy usunąć.
Metoda ta sprawdza, czy istnieje w bazie danych obiekt o takim identyfikatorze i go usuwa. Na końcu, jeżeli wszystko się udało, zwraca nam 204 No Content.
14.JPG
Aby przetestować nowo powstałą metodę uruchamiamy Postmana. Trzeba ustawić adres naszego kontrolera – pamiętajmy, że musimy podać id – w tym przypadku adres będzie wyglądał tak:
localhost:5000/api/listazakupow/1
Następnie zmienimy typ zapytania na DELETE, a sekcja Body musi być pusta. Po naciśnięciu Send powinno nam zwrócić 204 No Content.
15.JPG

Zakończenie

Udało się stworzyć WebApi, w którym możemy tworzyć, odczytywać, edytować i usuwać dane.
W tym artykule nauczyliśmy się
  • Stworzyć projekt z konsoli przy pomocy dotnet.
  • Stworzyć proste WebApi.
  • Testować api przy pomocy Postman.
Pełen kod do aplikacji znajduje się w repozytorium GitHub.

Komentarze

Popularne posty z tego bloga

Wymiana dysku w Macbook Air 13 2017 na m2

Jestem wielkim miłośnikiem komputerów Apple. Uważam, że są one bardzo dobrze wykonane i przemyślane. Posiadam Macbooka Air 13 z 2017 roku (Model A1466) i jestem z niego bardzo zadowolony. Jedynym jego mankamentem jest zbyt mała pojemność dysku . Wersja laptopa, którą posiadam była wyposażona w dysk o pojemności 128 GB. Dla programisty .NET to stanowczo za mało! Ta pojemność starcza jedynie na zainstalowanie niezbędnych narzędzi programistycznych i stworzenie maszyny wirtualnej.  A gdzie miejsce na inne dane?  Zakup dysku pasującego do tego komputera o pojemności 512 GB to koszt ponad 2500zł. Nie warto narażać się na aż tak wysokie koszty - można to zrobić taniej.  Wystarczy kupić adapter ze złącza Apple (12pin-16pin) na złącze m2 i kompatybilny dysk na m2. W sumie wydamy nie więcej jak 500zł, czyli 5 razy mniej jak w przypadku zakupu dysku przeznaczonego do Macbooka, a efekt będzie taki sam. Samą przejściówkę zamówiłem z  aliexpress  za jedyne 30zł. Po przeanali

Virago 535, przedni gar nie pali tak jak trzeba

Ten wpis będzie mniej komputerowy, a bardziej hobbystyczno - mechaniczny. Tak jak wspominałem w zakładce O mnie, moim oczkiem w głowie jest mój wiekowy 22-letni motocykl Yamaha Virago 535. Jest to motor, który idealnie spełnia wymogi prawa jazdy kategorii A2. Nie jest wyposażony we żadne wtryski ani komputery pokładowe, jest to najbardziej klasyczne rozwiązanie z gaźnikiem i dźwignią ssania. Pod koniec zeszłego sezony miałem problem z przednim cylindrem. Virago 535 ma silnik w kształcie litery V i posiada dwa cylindry, które potocznie nazywamy garami. Mój motocykl z trudem odpalał i po rozgrzaniu silnika okazywało się często że przedni cylinder jest zimny – nie działa. Doraźnie pomogło wymiana świec i wizyta u miejscowego mechanika, który zapewniał ze wyregulował gaźniki i coś tam jeszcze zrobił i na pewno wszystko będzie działać jak należy. Ponieważ był to już późny październik  i dni były coraz chłodniejsze  nie miałem szansy w pełni przetestować czy wszystko działa jak trze

Praca Licencjacka: Implementacja gry komputerowej gatunku Hack’n Slash w oparciu o silnik Unity3D

Tytuł tematu mojej pracy licencjackiej to  Implementacja gry komputerowej gatunku  Hack’n Slash w oparciu o silnik Unity3D. Celem pracy jest implementacja gry komputerowej w oparciu o istniejący silnik Unity.  Gra Samurai jest gatunku Hack'n Slash. W grze wcielamy się w samuraja, który ma za zadanie pokonanie przeciwników. Do dyspozycji mamy podstawowy atak mieczem. Wraz z ilością pokonanych przeciwników siła i żywotność na naszego bohatera zwiększa się. Dodatkowo, w pracy opisano problematykę tworzenia gier komputerowych, początki przemysłu gier komputerowym, rynek gier komputerowych i najpopularniejsze obecnie silniki gier. Skupiono się głównie na opisaniu silnika Unity i zestawu narzędzi, które on oferuje. Został też dokładnie opisany sposób powstania gry Samurai - wszystkie funkcje i świat gry.   Jeżeli ktoś był by zainteresowany przeczytaniem mojej pracy dyplomowej to jest ona dostępna w czytelniach biblioteki SGGW.