Jeśli cats/123
reprezentuje zasób potem myśleć o tym w ten sposób: że zasób może mieć wiele stany (jedzenie, chodzenie, spanie, skoki, pissing, ...). Podczas projektowania interfejsu API za pomocą stylu architektonicznego REST użytkownik chce zezwolić aplikacji klienta na przekazywanie dopuszczalnych żądań do zasobu, który zmieni jego stan.
W kontekście cats/123
można to zrobić za pomocą serii żądań POST, które spowodują zmianę stanu zasobu. Korzystając z możliwości hipermedialnych w REST, można utworzyć proces, taki jak żądania i odpowiedzi przedstawione poniżej. Zauważ, że dopuszczalne linki zmieniają się w odpowiedzi na POST. Ponadto aplikacja kliencka będzie kodować do właściwości zawartych w tablicy Links, a nie do rzeczywistego identyfikatora URI zawartego we właściwościach Href.
Zapytanie:
GET cats/123
Response:
{
"Color" : "black",
"Age" : "2",
"Links":[
{
"Food":"kibbles",
"Method":"POST",
"Href":"http://cats/123",
"Title":"Feed the cat"
},
{
"Scare":"yell real loud",
"Method":"POST",
"Href":"http://cats/123",
"Title":"Scare the cat"
}]
}
Zapytanie:
POST cats/123
{
"Food":"kibbles"
}
Response:
{
"Color" : "black",
"Age" : "2",
"Tummy" : "full"
"Links":[
{
"Sleep":"lap",
"Method":"POST",
"Href":"http://cats/123",
"Title":"Pet the cat"
},
{
"Scare":"yell real loud",
"Method":"POST",
"Href":"http://cats/123",
"Title":"Scare the cat"
}]
}
+1. Dzięki. Ale pomyślałem, że powinniśmy użyć PUT zamiast POST do aktualizacji zasobu? Czytałem, że POST powinien być użyty do stworzenia? – SiN
Niestety, dyskusje ("argumenty") dotyczące stylu architektonicznego REST opierają się na zrozumieniu specyfikacji HTTP i zawartych w niej definicji. W skrócie, [specyfikacja HTTP] (http://www.ietf.org/rfc/rfc2616.txt) mówi, że metoda PUT jest sposobem wysyłania * całej * reprezentacji zasobów (jednostka aktualizowana przez klienta) do serwer, aby mógł zastąpić bieżącą reprezentację zasobu, zakładając, że klient miał najnowszą wersję. W pytaniu "akcja" żąda zmiany stanu zamiast hurtowego zastąpienia zasobu zaktualizowaną wersją. –
{Zabrakło miejsca :) :) Ponadto, POST jest akceptowanym sposobem powodowania przejścia reprezentacji zasobów z jednego stanu do drugiego. –