Styl architektoniczny - REST

Wstęp

REST (ang. REpresentational State Transfer) – styl architektoniczny oprogramowania wprowadzony i zdefiniowany w 2000 roku przez Roya Fieldinga w jego rozprawie doktorskiej, którą można znaleźć pod adresem: http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm. Autor  wymienia sześć ograniczeń, na których opiera się architektura REST:

  • jednorodny interfejs (ang. uniform interface),
  • bezstanowość (ang. stateless),
  • pamięć podręczna (ang. cache),
  • klient-serwer (ang. client-server),
  • system warstwowy (ang. layered system),
  • kod na żądanie (ang. code on demand).

REST nie jest standardem, jak już wspomniałem wcześniej podstawą jest sześć wyżej wymienionych ograniczeń.  Jednak rozwiązania oparte o architekturę REST przez cały czas ewoluują, pojawiają się dodatkowe kryteria i rozwiązania. Według mnie jeżeli rozpatrujemy wykorzystanie w naszym rozwiązaniu architektury REST to należy brać pod uwagę następujące cechy:

  • model klient-serwer, gdzie klient to właściwie dowolna aplikacja (desktop, mobilna, działająca w przeglądarce internetowej), która jest w stanie za pomocą metod http (GET, POST, PUT, DELETE, OPTIONS, HEAD) uzyskać dostęp do zasobów serwera. Zasoby w ramach serwera udostępniane są przez serwisy REST,
  • dostęp do zasobów serwera odbywa się przez URL,
  • dane pomiędzy klientem a serwerem przesyłane są przez tzw. obiekty danych reprezentowane przez najczęściej XML lub JSON,
  • komunikacja pomiędzy klientem a serwerem jest bezstanowa, co oznacza, że każde odpytanie serwisu REST ze strony klienta jest traktowane jako niezależna (od poprzednich odpytań) transakcja. Serwis REST nie utrzymuje danych związanych z poszczególnymi odpytaniami przez klienta - mówimy tutaj o braku utrzymania stanu konwersacji pomiędzy poszczególnymi wywołaniami serwisu. Takie rozwiązanie posiada zalety jak również i wady. Do największych wad zalicza się to, że klient chcąc uzyskać dane od serwisu REST musi wysłać w swoim pojedynczym (każdorazowym) żądaniu komplet potrzebnych informacji do tego aby serwer zwrócił oczekiwany rezultat (zasób). Jeżeli istnieje potrzeba zapamiętania stanu konwersacji, należy zadbać o to poprzez implementację odpowiedniej logiki po stronie aplikacji klienta,
  • skalowalność - ponieważ komunikacja pomiędzy klientem a serwerem jest bezstanowa, serwery nie muszą utrzymywać stanu konwersacji z klientem, nie muszą również wymieniać między sobą danych sesyjnych,
  • wydajność,
  • prostota,
  • modyfikowalność.


Prostota REST sprawia, że wytwarzając aplikacje oparte o REST projektanci i deweloperzy skupiają się raczej na aspekcie funkcjonalnym rozwiązania niż na zagadnieniach technologicznych.
Możliwości zastosowania i prostota REST sprawiła, że styl ten stał się alternatywą dla rozwiązań opartych na SOAP (ang. Simple Object Access Protocol).

Implementacja

Jeżeli chodzi o możliwości implementacji aplikacji opartych na REST to istnieje ich co najmniej kilka. Do najbardziej popularnych zalicza się rozwiązania
  •  JAX-RS – standard wchodzący w skład JEE
  •  Spring