Услуги 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