Java Spring Boot #2 - przesyłanie danych poprzez REST API metodą POST

in #pl-artykuly7 years ago

Cześć,
w tym artykule chciałbym pokazać wam jak możecie przekazywać pewne dane używając RESTowego API metodą http POST.

Do wykonania tego zadania będę się opierał na kodzie, który został stworzony w poprzednim artykule, dzięki czemu będzie można przejść do sedna problemu.

Jeżeli chcesz podążać za poradnikiem, to zalecam na przejście przez poprzedni poradnik, a następnie przejście przez ten.

Pierwszym krokiem będzie stworzenie nowego endpointa w klasie LanguageController, która jest oznaczona jako kontroler RESTowy w następujący sposób

Jak widzicie, nasza metoda została oznaczona jako typu POST używając adnotacji @PostMapping. Dodatkowo wpisaliśmy tam ścieżkę /languages/, która będzie otwarta w celu dodania jakiś danych.

Metoda addLang zwraca mapę, gdzie kluczem jest pewien napis, a wartość to jakaś wartość typu prawda lub fałsz. Przyda nam się to, żeby powiadomić kogoś, że rekord został dodany.

Parametry metody addLang, to name, description oraz isCool, Te parametry są oznaczone adnotacją @RequestParam oznaczająca parametry zapytania zamieszczone w ciele zapytania (body). Poprzez te parametry otrzymujemy dane i przekazujemy je do serwisu przetwarzającym dane i zapisującym dane do bazy danych.

Service LangService będzie nam przetwarzał dane z endpointa i będzie zwracał czy dane zostały pomyślnie zapisane. W celu uproszczenia poradnika, serwis będzie zwracał jedynie prawdę albo fałsz. Można tu równie dobrze przekazywać treść błędu jeżeli takowa by została dodana.

Taka wskazówka, bo bardzo często widzę ten problem. Otóż staraj się przetwarzać dane poza endpointami. Jak widzisz, w moim przypadku przekazuję wszystko do serwisu LangService, a nie wykonuję logiki bazy w endpoincie. Zalety takiego podejścia są takie, że mamy logikę w jednym miejscu, jak zmienimy coś w kodzie, to popsuje się coś w wiadomym miejscu, możemy taki kod wywoływać w wielu miejscach bez potrzeby stosowania metody "kopiego pejsta", czyli kopiowaniu tego samego kodu w wielu miejscach. Takie coś powoduje problem taki, że jak zmienisz w jednym miejscu, to funkcjonalność stanie się niespójna i spowoduje powstanie ukrytych błędów typu "No przecież to zmieniłem, powinno działać".

Okej, mamy już prosty endpoint RESTowy, więc uruchomiamy nasz serwer i dodajmy coś do bazy.

Aby dodać coś metodą post, musimy wysłać zapytanie http, ale jak? Nie wystarczy nam już przeglądarka. Do tego polecam użyć takiego programu jak np. Postman. Jest to bardzo prosty w działaniu program pozwalający na m.in. wysyłanie zapytań typu POST, GET itd. Program możecie pobrać ze strony producenta

Gdy zainstalujemy ten program, bądź uruchomimy inny tego typu, to możemy wysłać jakieś zapytanie. W przypadku postmana powinniśmy wypełnić go w ten sposób

Jak widzimy, mamy ustawione zapytanie jako POST, ustawiliśmy ścieżkę na jaką wyślemy zapytanie. Powinno ono wyglądać tak http://localhost:8080/languages/.
Powinniśmy kliknąć na zakładkę Body tak jak to jest na powyższym zrzucie ekranu i powinniśmy dodać w ciele zapytania trzy parametry jakimi są name, description oraz isCool. Dla każdego parametru wpisujemy jego zawartość po prawej stronie tabelki.
Na końcu klikamy przycisk Send.
Naszym oczom powinna pojawić się odpowiedź JSONowa {"saved": true}.
Aby sprawdzić czy dodała się nam dana do bazy danych, wpiszmy w przeglądarce adres (w moim przypadku) http://localhost:8080/languages/Ruby. Jeżeli podążaliście za poradnikiem, to powinniście zobaczyć coś takiego

Aktualnie możemy dodawać tam wszystko co nam się żywnie podoba. To nie jest dobry pomysł. Dlatego też musimy zmodyfikować nasz serwis LangService, który powinnien walidować dane przekazywane przez użytkownika. Do tego celu stworzymy sobie klasę LangValidator, który będzie posiadał prostą metodą weryfikującą do dany użytkownik chce wprowadzić do bazy. Ta klasa może wyglądać na przykład tak

Użyjmy teraz walidatora w naszym LangService w następujący sposób

Gdy mamy jakiś sposób na weryfikację danych wprowadzonych przez użytkownika możemy przetestować czy działa w oczekiwany sposób. Wykonam jakiś "zakazany" request i zobaczcie poniżej co wyjdzie

Jak widzicie, udało nam się stworzyć prosty RESTowy endpoint typu POST, nauczyliśmy się jak możemy wywołać zapytanie za pomocą Postmana i udało się nam zweryfikować dane przez nas wysłane.

Sort:  

Congratulations @grzegorz2047! You have completed some achievement on Steemit and have been rewarded with new badge(s) :

Award for the number of upvotes

Click on any badge to view your own Board of Honor on SteemitBoard.
For more information about SteemitBoard, click here

If you no longer want to receive notifications, reply to this comment with the word STOP

Upvote this notification to help all Steemit users. Learn why here!

Coin Marketplace

STEEM 0.27
TRX 0.25
JST 0.039
BTC 96923.38
ETH 3370.74
USDT 1.00
SBD 3.55