Piszę usługę RESTful dla systemu zarządzania klientami i próbuję znaleźć najlepszą praktykę częściowej aktualizacji rekordów. Na przykład chcę, aby osoba dzwoniąca mogła odczytać pełny rekord za pomocą żądania GET. Ale do jego aktualizacji dozwolone są tylko niektóre operacje na rekordzie, takie jak zmiana stanu z WŁĄCZONEGO na WYŁĄCZONY. (Mam bardziej złożone scenariusze niż to)
Nie chcę, aby osoba dzwoniąca przesłała cały rekord ze zaktualizowanym polem ze względów bezpieczeństwa (wydaje się to również przesadą).
Czy istnieje zalecany sposób konstruowania identyfikatorów URI? Czytając książki REST, wywołania w stylu RPC wydają się być niezadowolone.
Jeśli poniższe wywołanie zwróci pełny rekord klienta dla klienta o identyfikatorze 123
GET /customer/123
<customer>
{lots of attributes}
<status>ENABLED</status>
{even more attributes}
</customer>
jak powinienem zaktualizować status?
POST /customer/123/status
<status>DISABLED</status>
POST /customer/123/changeStatus
DISABLED
...
Aktualizacja : Aby rozszerzyć pytanie. W jaki sposób włącza się „wywołania logiki biznesowej” do interfejsu API REST? Czy istnieje uzgodniony sposób na zrobienie tego? Nie wszystkie metody są z natury CRUD. Niektóre są bardziej złożone, na przykład „ sendEmailToCustomer (123) ”, „ mergeCustomers (123, 456) ”, „ countCustomers () ”
POST /customer/123?cmd=sendEmail
POST /cmd/sendEmail?customerId=123
GET /customer/count
POSTod samego Roy'a Fieldinga: roy.gbiv.com/untangled/2009/it-is-okay-to-use-post gdzie podstawową ideą jest: jeśli nie ma to metoda (taka jakGETlubPUT) idealnie dopasowana do twojego zastosowania operacyjnegoPOST.