W dużym skrócie można powiedzieć, że aplikacja webowa to system informatyczny składający się z frontendu i backendu, znajdujący się pod konkretnym adresem URL,
do którego dostęp uzyskujemy przez przeglądarkę internetową. Front aplikacji znajdujący się w przeglądarce (napisany np. w Angular, React czy Vue)
wysyła requesty na serwer, gdzie mamy backend napisany w Springu.
Tutaj pojawia się problem, ponieważ do uruchomienia takiego backendu potrzebujemy przynajmniej kawałka kodu stworzonego w interfejsie użytkownika.
Jak wiadomo programowanie frontendu to zupełnie inna bajka i trzeba poświęcić trochę czasu aby się tego nauczyć.
Szczególnie podczas początków nauki fajnie byłoby skupić się tylko na jednej warstwie.
Jeśli zatem chcemy uczyć się programowania w Springu powinniśmy skupić się
na warstwie backendowej, a wysyłanie reqeustów "zlecić" zewnętrznemu mechanizmowi. Na szczęście można tak zrobić.
Wymagania do tego rozdziału:
- Podstawowa umiejętność programowania w Javie.
- Znajomość narzędzia Maven w stopniu umożliwającym budowę projektu.
- Podstawowa wiedza ze Springa.
Instalacja Postmana
Do wysyłania żądań HTTP w stronę Springa nie potrzebujemy tworzyć kodu frontendu. Możemy w tym celu wykorzystać narzędzie wyspecjalizowane w wysyłaniu
żądań i w odbieraniu odpowiedzi. Takim narzędziem jest Postman. Co więcej, możemy takie żądania zapisywać w celu wykorzystania ich w przyszłości,
a nawet tworzyć kolekcje (zbiory) takich żądań. Ale po kolei...
Najpierw udajemy się na stronę, z której ściągniemy Postmana na dysk (Postman for Windows):
Po zainstalowaniu programu możemy założyć konto, które pozwoli nam na zarządzanie workspace'ami, synchronizację danych pomiędzy urządzeniami,
a także backup w chmurze Postmana.
Pierwsze uruchomienie
Pierwsze uruchomienie Postmana powinno zakończyć się pojawieniem widoku podobnego do poniższego
(w zależności od wersji, detale interfejsu użytkownika mogą się nieco różnić):
Na obrazku widzimy po kolei:
(1) - Listę z wyborem metody HTTP jaką będziemy wysyłać żądanie, np.
GET,
POST,
PUT, itd.
(2) - Miejsce do wpisania adresu URL, na który będziemy wysłać żądanie, na przykład
http://localhost:8080/api/items.
(3) - Przycisk do wysyłania żądania.
(4) - Miejsce, w którym zostanie wyświetlona odpowiedź HTTP.
(5) - Zakładki z historią wysyłanych żądań oraz kolekcjami jakie możemy stworzyć, grupując nasze żądania.
Przygotowanie aplikacji na Spring Boot
Naszym celem będzie wysłanie żądania do aplikacji webowej, której backend został napisany w Springu. W tym celu musimy mieć zaprogramowany chociaż kawałek
takiej aplikacji. Jeśli nie macie pod ręką swojego projektu, możecie ściągnąć przykładowy projekt z naszego Githuba:
Standardowo możesz go sklonować, albo po prostu ściągnąć zip-a. Jeśli nie wiesz, jak klonujemy projekt w Gicie, to zerknij do naszego kursu
Git - Pierwsze kroki.
Uwaga.
W przypadku, gdy posiadasz własny projekt Spring Boot i potrafisz go uruchomić, możesz pominąć dalszą część tego paragrafu.
Przejdź od razu do sekcji "Wysłanie requestu do aplikacji".
Projekt importujemy do naszego IDE:
W ramach projektu mamy napisanych kilka metod w kontrolerze Springa -
ItemController.
W dwóch z nich założyliśmy breakpointa (
create,
read):
Uruchamiamy projekt, pamiętając przy tym, że
w projekcie ustawiliśmy port 8888 (port na którym będzie uruchomiona nasza aplikacja w Springu):
Wysłanie requestu do aplikacji
Przyszedł czas na wysłanie naszego pierwszego żądania do uruchomionej aplikacji. Przypominamy, że aplikacja z naszego Githuba startuje
na porcie 8888. Z tego powodu to właśnie na ten port będziemy wysyłać żądania. Jeśli masz własną aplikację uruchomioną na przykład na domyślnym porcie 8080,
wówczas powinieneś użyć swojego portu.
Tworzymy więc nasz pierwszy request z Postmanem - New > Request:
Ustawiamy nazwę requestu, na przykład - "read"
(1) oraz opis, przykładowo - "Get all items"
(2). Dodatkowo naciskamy przycisk "Create Collection"
(3), aby stworzyć kolekcję
(zbiór żądań które chcemy trzymać razem). Kolekcję nazwaliśmy "JavAPPa - Przykłady".
Zapisaliśmy nasz żądanie i teraz musimy je skonfigurować. Kolejnym krokiem jest więc zdefiniowanie metody HTTP
(1) oraz adresu URL
(2)
dla naszego żądania
read (3). Podczas tworzenia URL-a
(2)
wprowadzamy adres aplikacji oraz numer portu (po dwukropku):
Klikamy w przycisk
Send (1), który odpowiada za wysłanie naszego requesta do aplikacji Spring Boot.
Po krótkiej chwili otrzymujemy odpowiedź
(2).
Jeśli korzystasz z aplikacji z naszego Githuba, to odpowiedź będzie zawierała przygotowaną po stronie Springa listę obiektów typu
Item.
Na koniec przyjrzyjmy się jeszcze, co się dzieje w naszej aplikacji po wysłaniu requesta. Korzystając z aplikacji z Githuba możesz założyć
breakpointy tak jak my. Wówczas wykonanie programu zatrzyma się w breakponcie w metodzie, na którą wysłaliśmy żądanie:
To dlaczego uruchomiona została metoda
read (1) nie wynika oczywiście z jej nazwy (ona może być dowolna, choć lepiej żeby miała związek z tym co robi metoda),
ale z tego że nasz request został wysłany na adres
api/items (2), a metoda jest oznaczona adnotacją
GetMapping (3) (żądanie z Postmana wysłaliśmy
właśnie metodą GET).
Jeśli nadal jest to nie do końca jasne, to więcej o temacie dopasowania ścieżek piszemy w rozdziale
Spring MVC: Mapowanie requestów HTTP.
Aby kontynuować wykonanie programu, naciskamy F8 i w ten sposób przechodzimy do wywołania metody
getItems w serwisie
ItemServiceImpl. Tam widzimy,
że metoda pobiera dane z bazy i zwraca odpowiedź. Odpowiedź jest zwracana do
ItemController, a następnie jest wysłana przez sieć i wraca w formie obiektu JSON
do Postmana.
Zobaczmy tą odpowiedź raz jeszcze:
Ćwiczenie
W ten sposób można dowolnie zmieniać, a następnie debugować kod Springa, wysyłając różne requesty. W ramach ćwiczenia dodaj do Postmana metodę
POST, tak aby wywoływała ona metodę
create, która znajduje się w kodzie klasy
ItemController (w projekcie z Githuba). Metoda ta jest obecnie pusta (zwraca pustą odpowiedź),
ale nic nie stoi na przeszkodzie, abyś zaimplementował tę metodę tak, by zapisała nowy item do bazy (baza
H2 jest wbudowana w projekcie).
Wtedy metoda
getItems - po uruchomieniu opisanego przez nas żądania GET zwróci listę naszych itemów plus jeszcze jeden - Twój nowo dodany item.
Topowe Materiały
Postman Learning Center
Download Postman
Baeldung: Testing Web APIs with Postman Collections
Baeldung: Basic Authentication With Postman
Udemy: [NEW] Spring Boot 3, Spring 6 & Hibernate for Beginners — polskie napisy