REST API w Spring Boot - czym jest i jak je zaimplementować?

 

W niniejszym artykule dowiesz się co to jest REST API oraz jak je zaimplementować np. w Spring Boocie. Jeżeli chcesz wiedzieć jeszcze więcej na ten temat, to już teraz sprawdź nasz program rozwojowy Java Developer PRO

REST API

REST API to obecnie standard wśród aplikacji webowych. „Być zgodnym z REST” oznacza tworzenie endpointów zgodnie z pewnymi zasadami. Przyjrzyjmy się im zatem:

Na początku zacznijmy od tego, że nasze URLe powinny definiować zasoby – czyli np. użytkowników, zamówienia, produkty… ogólnie rzeczowniki. Dla każdego zasobu możemy przeprowadzać podstawowe 4 operacje, czyli CRUD – Create, Read, Update, Delete. Jak możemy zauważyć, są to czasowniki – będą one reprezentowane przez konkretne metody HTTP (odpowiednio POST, GET, PUT/PATCH, DELETE). Do wysyłki oraz odbioru danych używany jest przeważnie format JSON. Żeby nasze API mogło nazywać się naprawdę „RESTful”, musielibyśmy dodać również hipermedialne metody – HATEOAS.

Implementacja

Znamy już założenia. Weźmy więc pod lupę zasób użytkowników - przykładowa klasa w Javie wyglądałaby następująco:

public class User {
    
    private Long id; // will be auto generated here

    private String username;

    private Integer phone;
    
    // constructor, getters..
    
}

ID będzie automatycznie generowane (czy to przez samą klasę User, czy to przez bazę danych – na ten moment nieważne), stąd konstruktor będzie zawierał jedynie nazwę użytkownika i numer telefonu. Jeśli chodzi o Spring Boota, to można o nim napisać masę osobnych artykułów - na potrzeby niniejszego, ograniczę się jedynie do pokazania kodu z kontrolerów. Nasz kontroler będzie zapisywał użytkowników w mapie przypisującej id do danego usera:

@RestController
public class UserController {

    private Map<Long, User> users = new HashMap<>();

}

Zbiór użytkowników reprezentowany będzie przez URL /users. Gdy chcemy utworzyć nowego użytkownika, dołożymy do tego odpowiednią metodę, a więc całość będzie wyglądać POST /users. Potrzebujemy jeszcze tylko wysłać dane o naszym nowym użytkowniku – prześlemy je w ciele zapytania (request body), w formacie JSON. W odpowiedzi powinniśmy otrzymać informacje o nowo stworzonym użytkowniku.

@PostMapping("/users")
public User create(@RequestBody User userWithoutId) {
    User userWithId = new User(userWithoutId.getUsername(),                userWithoutId.getPhone());
    users.put(userWithId.getId(), userWithId);;
    return userWithId;
}

Gdy już stworzyliśmy usera i mamy jego id, możemy w każdej chwili pobrać jego dane, poprzez zapytanie GET /users/{id}, „id” w klamrach oznacza, że będzie tam dowolna liczba, np /users/5.

@GetMapping("/users/{id}")
public User get(@PathVariable Long id) {
    return users.get(id);
}

Może się również zdarzyć, że chcemy zmienić pewną informację o danym użytkowniku, np. jego numer telefonu. W takim wypadku, mamy dwie możliwości - możemy np. przekazać w ciele zapytania wszystkie informacje użytkownika - zarówno nowe jak i niezmienione. W takim przypadku oczekiwać będziemy podmiany użytkownika - użyjemy do tego zapytania PUT /users/{id}. Natomiast drugim sposobem byłoby wysłanie jedynie tych informacji, które chcemy, żeby były zmienione – czyli w przypadku chęci zmiany numeru telefonu, w ciele zapytania wysłalibyśmy jedynie nowy numer, bez pozostałych danych. Wówczas ma miejsce zapytanie PATCH /users/{id}. W naszym wypadku załóżmy całkowity replace, czyli metoda PUT:

@PutMapping("/users/{id}")
public User replace(@RequestBody User newUserWithId, @PathVariable Long id) {
    users.put(id, newUserWithId);
    return newUserWithId;
}

Ostatnią podstawową metodą HTTP jest DELETE – jak można się spodziewać, chodzi o usunięcie użytkownika. Użyjemy wówczas zapytania DELETE /users/{id}.

@DeleteMapping("/users/{id}")
public void remove(@PathVariable Long id) {
    users.remove(id);
}

Podsumowanie

W powyższym artykule zobaczył(a/e)ś zasady tworzenia REST API oraz jak je zaimplementować w Spring Boocie. Znasz już metody HTTP i wiesz, za co odpowiadają. Zachęcam do samodzielnych prób stworzenia analogicznego API, bądź rozszerzenia powyższego. Jeżeli chcesz czegoś więcej, to sprawdź program kursu Java Developer PRO, który przygotuje Cię do pracy na stanowisku Java Developera.

Rafał Pieńkowski

Jestem java developerem od ponad 4 lat. Tworzyłem projekty dla firm z branży telekomunikacyjnej, wykrywania prania brudnych pieniędzy, i farmaceutycznej. Uwielbiam przekazywać wiedzę i widzieć jak ktoś zrozumiał skomplikowane zagadnienie dzięki mnie. Można mnie znaleźć na [Linkedin](https://www.linkedin.com/in/rafa%C5%82-pie%C5%84kowski-9401a8b9/) oraz na [forum](https://4programmers.net/Profile/72996)
Komentarze
Ostatnie posty
Data Science News #204
Data Science News #203
Data Science News #202
Data Science News #201