Услуги REST - разоблачение не-данных "действий"
Я понимаю, как использовать REST для взаимодействия с общими объектами - используя имена URL-адресов для сопоставления сущностям и глаголам HTTP для сопоставления действиям на этих объектах. Но каков общепринятый способ взглянуть на "действия" больше как RPC?
Например, скажем, я хочу отправить команду для устройства на reset? Здесь нет настоящего "сущности" или я делаю что-то вроде POST до http://mydevice/device/reset?
Ответы
Ответ 1
/device/reset
или /system/reset
в порядке.
Шаблон дизайна REST "не рекомендует вам НЕ использовать какие-либо глаголы.. Вы могли бы сделать:
POST http://mydevice/system/state
<stateType>RESET</stateType>
Дополнительная информация:
Ответ 2
Я не думаю, что случай использования POST. "RESET action" - это идемпотентное действие (если вы назовете его n раз, вы всегда получите тот же результат), поэтому IMHO вы должны использовать PUT-вызов вместо POST (поскольку POST не является идемпотентным).
Кроме того, поскольку вы размещаете ресурс, вы можете использовать
PUT http://system
<device>
<status>RESET</status>
</device>
или
PUT http://system/status/reset
Но я думаю, что первый из них "более спокойный", так как вы кладете ресурс, а второй onde вы просто используете URL.
Ответ 3
Обычно я называю сущность "система" или что-то в этом роде. Итак, вы делаете "/system/ reset". Вы выбрали устройство, чтобы оно тоже работало.
Но да, я обычно рассматриваю эти типы действий как обновления, которые будут использовать метод POST. Поэтому я думаю, что вы правы для POST на/device/reset