REST - Representative State Transfer

Bezpośrednie wykorzystanie protokołu HTTP w celu:
zdalnego dostępu do zasobów (czyli do danych)
realizacji usług biznesowych

Charakterystyczne cechy usług REST:
zasoby są umieszczone pod adresami URL
struktura adresów odpowiada logicznej strukturze danych
operacje HTTP: GET PUT DELETE realizują swoją semantykę odczyt / zapis / usunięcie
przy czym to twórca usługi decyduje, które operacje są dostępne
zasoby mogą być odczytywane i zapisywane (czyli „transferowane”) w różnych formatach. Najbardziej popularny format dla danych obiektowych to JSON, ale często także XML, a w zależności od potrzeb można używać innych (np. obrazki, PDF-y)
ten sam zasób (z tego samego adresu) może być dostępny w różnych formatach

W zaawansowanych usługach REST-owych duża rolę odgrywają metadane, przede wszystkim odnośniki prowadzące z jednego zasobu do innego zasobu, podobnie jak klucze obce w SQL.
Wg niektórych źródeł istnieją trzy poziomy zaawansowania usług REST:
0. Podstawowy interfejs programistyczny oparty o HTTP, np. pobieranie danych z określonego adresu. Bez struktury, bez konsekwentnego wykorzystania operacji HTTP.
1. Podstawowa usługa REST - mniej więcej taka, jaką wykonujemy na zajęciach
2. Usługa z dużą ilością metadanych dodawanych do JSONa, wykorzystująca np. dodatkowe znaczniki ATOM lub HATEOAS. W Springu taką usługę może zrealizować za pomocą bibliotek jak REST Repositories lub HATEOAS.

W Javie serwer REST można realizować za pomocą:
JAX-RS, część Jakarta EE
Trzy implementacje:
Jersey - ref. impl., używana na serwerach Glassfish oraz WebLogic
RestEasy - Redhat - używana przez serwer WildFly
Apache CXF - programista może użyć jako biblioteki np. na serwerze Tomcat
Spring MVC (czyli kontrolerów Springa)
Dodatkowych bibliotek Spring REST Repositories, Spring HATEOAS... - większa automatyzacja
Moduł Jersey w aplikacji Spring Boot - użycie technologii JAX-RS w ramach Springa




