REST дизайн интерфейса для управления машиной - PullRequest
3 голосов
/ 18 января 2012

У меня есть приложение, которое управляет машиной, и я хочу добавить к нему интерфейс REST.Две команды высокого уровня предназначены для запуска и остановки работы машины.Первоначально я думал о том, чтобы сопоставить эти операции с глаголами POST и DELETE, такими как:

POST /control           // start machine operation
DELETE /control         // stop machine operation

, но мы на самом деле ничего не удаляем, просто останавливая операцию.Удалить, кажется, не подходит.Другая идея заключалась в том, чтобы дополнительно разобрать операции в URL-адресе, например

POST /control/start_operation    // start machine operation
POST /control/stop_operation     // stop machine operation

, но это, похоже, противоречит концепции REST о том, что в URL-адреса не помещаются глаголы.Какой-нибудь совет от читателей Stack Overflow о том, как лучше всего отобразить этот вид операции?

Ответы [ 2 ]

2 голосов
/ 18 января 2012

REST означает Передачу репрезентативного состояния, где взаимодействие направлено на передачу состояния ресурсов.

Чтобы спроектировать «правильный» интерфейс REST, сначала необходимо определить, какие ресурсы'состояние передается.

Из того, что вы сказали, кажется, что единственным состоянием, которое будет передано, является текущее состояние машины.Для этого вы действительно просто обновляете это состояние с помощью вызовов REST, и в зависимости от этого состояния происходят дополнительные действия.

HTTP-глагол, который лучше всего соответствует «Обновить состояние и иметь другиевещи случаются "модель ПОЧТА.Вы бы установили POST на /myMachineController/status, а полезная нагрузка была бы on или off.

В целом, REST - это в значительной степени ориентированная на данные парадигма обслуживания и обычно не очень хорошо подходит в некоторых местах.где не так много данных для действия.

1 голос
/ 18 января 2012

например. если это 3d-принтер:

POST http://localhost/3d-printer/state HTTP/1.1
Content-Type: application/x-www-form-urlencoded

state=on
...