Blog webdeveloperski Patryk yarpo Jar

REST – ciekawszy sposób na komunikację client-server

Autor wiadomości Lipiec 29, 2012

REST (ang. Representational State Transfer) jest wzorcem narzucającym dobre praktyki tworzenia architektury aplikacji rozproszonych. RESTful Webservices (inaczej RESTful web API) jest usługą sieciową zaimplementowaną na bazie protokołu HTTP i głównych zasad wzorca REST. W tym wpisie postaram się pokazać (bardzo) podstawowe założenia.

Ważnym założeniem REST jest istnienie zasobów (ang. resources) jako źródeł danych a także żądana akcja. Ale może po kolei...

Zapomniane metody HTTP w Ajaksie

Komunikując się z serwerem najczęściej korzysta się z dwóch metod:

  • GET
  • POST

Co więcej, często wykorzystuje się je nieprzemyślany sposób (aby nie powiedzieć losowy). Nigdy nie wiadomo, czy żądanie doda, usunie, nadpisze czy tylko pobierze dane z serwera. A szkoda, bo przecież o ile ładniej jest patrzeć w konsole Firebuga i po samym rodzaju metody odczytywać jakiego rodzaju operacja została wywołana.

Tytułowe "zapomniane" metody to (jest ich więcej, ale nie są potrzebne dla tego wpisu):

  • PUT
  • DELETE

Taki zestaw metod jakimi możemy wysłać żądanie do serwera pozwala, aby każdej z nich przypisać na stałe jeden typ operacji.

metoda typ operacji
GET pobieranie danych
POST dodawanie danych
PUT edycja danych
DELETE usuwanie danych

Na widocznej z boku tabelce widać ważne założenie RESTful Webservices. Jest to związanie niepodzielnie metody HTTP wykorzystanej przez żądanie ajaksowe z typem operacji, jaki mamy zamiar wykonać.

Zasoby

Innym ważnym zagadnieniem jest posiadanie zasobów (ang. resources). Przez zasób w przypadku aplikacji internetowej rozumiemy adres pewnego webservice'u, np:

http://example.com/dog

Pod takim adresem znajdować się będzie odpowiedni skrypt, który mając do czynienia z odpowiednim zestawem danych wykona dla nas pewną akcję.

Przykład: Za pomocą zasobu chcemy kontrolować bazę danych naszego serwisu o psach. Powiążmy jeszcze zasób z metodą:

zasób metoda co się stanie
http://example.com/dog
GET Pobranie wszystkich psów
http://example.com/dog/1
GET Pobranie psa o id = 1
http://example.com/dog
POST Dodawanie nowego psa do bazy (dane na jego temat są przesyłane w ciele żądania)
http://example.com/dog
PUT Edycja danych o psie (dane przesyłane są w ciele żądania)
http://example.com/dog/1
DELETE Usunięcie psa o id=1

Korzystając z takiego rozwiązania, nie zaglądając wcale w ciało żądań HTTP możemy śmiało określić, co się dzieje w konkretnych sytuacjach (lub co powinno się dziać ;)).
Widok konsoli firebug w aplikacji wykorzystującej RESTful webservices

By wiedzieć więcej

Sądzę, że zdecydowanie warto jest się zapoznać z RESTful Webservices, które w ostatnich latach staje się coraz popularniejsze i zaczyna wypierać strasznie opasły SOAP. Aby zgłębić wiedzę dotyczącą tego wzorca polecam lekturę:

Komentarze (1) Trackbacks (0)
  1. Zauważyłem jeden błąd, edycja zasobu (PUT) powinna odnosić się do istniejącego zasobu, czyli URL powinien wyglądać: http://example.com/dog/1.
    Jeżeli nie podamy identyfikatora zasobu (http://example.com/dog) edytujemy całą kolekcję


Leave a comment

 

Brak trackbacków.