Ich schreibe einen RESTful-Service für ein Kundenverwaltungssystem und versuche, die beste Vorgehensweise zum teilweisen Aktualisieren von Datensätzen zu finden. Ich möchte beispielsweise, dass der Anrufer den vollständigen Datensatz mit einer GET-Anforderung lesen kann. Zum Aktualisieren sind jedoch nur bestimmte Vorgänge im Datensatz zulässig, z. B. das Ändern des Status von AKTIVIERT in DEAKTIVIERT. (Ich habe komplexere Szenarien als diese)
Ich möchte aus Sicherheitsgründen nicht, dass der Anrufer den gesamten Datensatz nur mit dem aktualisierten Feld übermittelt (es fühlt sich auch wie ein Overkill an).
Gibt es eine empfohlene Methode zum Erstellen der URIs? Beim Lesen der REST-Bücher scheinen RPC-Aufrufe verpönt zu sein.
Wenn der folgende Aufruf den vollständigen Kundendatensatz für den Kunden mit der ID 123 zurückgibt
GET /customer/123
<customer>
{lots of attributes}
<status>ENABLED</status>
{even more attributes}
</customer>
Wie soll ich den Status aktualisieren?
POST /customer/123/status
<status>DISABLED</status>
POST /customer/123/changeStatus
DISABLED
...
Update : Um die Frage zu erweitern. Wie integriert man "Business Logic Calls" in eine REST-API? Gibt es einen vereinbarten Weg, dies zu tun? Nicht alle Methoden sind von Natur aus CRUD. Einige sind komplexer, wie " sendEmailToCustomer (123) ", " mergeCustomers (123, 456) ", " countCustomers () ".
POST /customer/123?cmd=sendEmail
POST /cmd/sendEmail?customerId=123
GET /customer/count
POST
von Roy Fielding selbst: roy.gbiv.com/untangled/2009/it-is-okay-to-use-post, in dem die Grundidee lautet: Wenn nicht Es handelt sich nicht um eine Methode (wieGET
oderPUT
), die sich ideal für Ihren Einsatz eignetPOST
.