Jaki jest „RESTful” sposób dodawania operacji innych niż CRUD do usługi RESTful? Powiedzmy, że mam usługę, która umożliwia CRUD dostęp do takich rekordów:
GET /api/car/123 <- Returns information for the Car object with ID 123
POST /api/car <- Creates a new car (with properties in the request)
PUT /api/car/123 <- Updates car 123 (with properties in the request)
DELETE /api/car/123 <- Deletes car 123
POST /api/car/123/wheel/ <- Creates a wheel and associates it to car 123
Gdybym chciał zmienić kolor auta, po prostu POST /api/car/123
dodałbym zmienną POST dla nowego koloru.
Ale powiedzmy, że chcę kupić samochód, a ta operacja jest bardziej skomplikowana niż zwykła aktualizacja właściwości „posiadanego samochodu” w rekordzie „użytkownika”. Czy RESTful jest po prostu zrobić coś takiego POST /api/car/123/purchase
, gdzie „zakup” jest w istocie nazwą metody? A może powinienem użyć niestandardowego czasownika HTTP, na przykład PURCHASE
zamiast POST
?
A może operacje inne niż CRUD są całkowicie poza zakresem REST?
PATCH /api/car/123
i wysłać parametr koloru LUB użyćPUT /api/car/123
i wysłać cały obiekt samochodu. POST wywnioskowałby, że tworzysz nowy samochód i prawdopodobnie nigdy nie powinien zawierać identyfikatora na końcu adresu URL