Я пишу сервис RESTful для системы управления клиентами и пытаюсь найти лучший способ частичного обновления записей. Например, я хочу, чтобы вызывающая сторона могла читать полную запись с помощью запроса GET. Но для его обновления разрешены только определенные операции с записью, например, изменение статуса с ENABLED на DISABLED. (У меня есть более сложные сценарии, чем это)
Я не хочу, чтобы вызывающий абонент отправлял всю запись только с обновленным полем из соображений безопасности (это также выглядит как перебор).
Есть ли рекомендуемый способ построения URI? При чтении книг REST вызовы в стиле RPC кажутся недовольными.
Если следующий вызов возвращает полную запись о клиенте с идентификатором 123
GET /customer/123
<customer>
{lots of attributes}
<status>ENABLED</status>
{even more attributes}
</customer>
как мне обновить статус?
POST /customer/123/status
<status>DISABLED</status>
POST /customer/123/changeStatus
DISABLED
...
Обновление : чтобы дополнить вопрос. Как включить «вызовы бизнес-логики» в API REST? Есть ли согласованный способ сделать это? Не все методы CRUD по своей природе. Некоторые из них являются более сложными, например ' sendEmailToCustomer (123) "," mergeCustomers (123, 456) "," countCustomers () "
POST /customer/123?cmd=sendEmail
POST /cmd/sendEmail?customerId=123
GET /customer/count
POST
от самого Роя Филдинга: roy.gbiv.com/untangled/2009/it-is-okay-to-use-post, где основная идея такова: если нет Это метод (например,GET
илиPUT
), идеально подходящий для вашей операции использованияPOST
.