Я работаю над службой WCF RESTful и заметил, что в некоторых местах я могу представлять операции, отличные от CRUD (не ресурсы), более чем одним способом.
Допустим, мы купили новый телевизор и подключили его к нашей частной сети. Теперь мы хотим создать веб-службу для просмотра и управления телевизором.
Для чтения и обновления свойств телевизора мы будем использовать следующий URI:
http://domain/tv/ ПОЛУЧИТЬ | PUT - получение и обновление свойств телевизора. (
company
,owner
,inches
)Для потребления видео мы будем использовать следующий URI:
ws://domain/tv/video — (предполагается, что WebSocket — лучший вариант для передачи видеоконтента)
И операции:
updateVersion
startBIT
(Встроенная самопроверка)changeChannel
turnVolumeUp
,turnVolumeDown
Первый дизайн заключается в использовании свойств для представления операций. Сервер заметит изменения свойств, а затем выполнит необходимые операции. Наконец, POST выполняет операции, которые не могут быть представлены свойствами:
http://domain/tv/ ПОЛУЧИТЬ | PUT — получение или установка
volume
илиchannel
с помощью объектов json.и для
updateVersion
илиstartBIT
:http://domain/tv/ POST с {function: 'updateVersion'} или {function: 'startBIT'}
Второй вариант заключается в представлении всех операций с использованием ресурса Command:
http://domain/tv/commands POST с {command: 'BIT', sender: 'Dan' .. . } - создать новую команду для выполнения
startBIT
,changeChannel
илиturnVolume
Третий дизайн заключается в том, чтобы представить каждую операцию, которая может быть произнесена как существительное, как ресурс, а остальные как свойства:
http://domain/tv/versionUpdates ПОЛУЧИТЬ | ПОСТАВИТЬ | УДАЛИТЬ | СООБЩЕНИЕ
http://domain/tv/BITs ПОЛУЧИТЬ | ПОСТАВИТЬ | УДАЛИТЬ | СООБЩЕНИЕ
http://domain/tv/ PUT ({volume: 10})
http://domain/tv/ PUT ({канал: 29})
Какой дизайн RESTful лучше всего?
POST tv/volume/100
, учитывая семантику POST?PUT tv/channel/13
может означать, что вы хотите обновить частоту или описание канала 13, но не означает, что телевизор должен переключиться на этот канал. Почему вы должны использовать два разных глагола для установки текущего состояния двух разных вещей, обе из которых, естественно, могут быть активны только в одно и то же время - если только у вас нет нескольких тюнеров в случае каналов? - person CodeCaster   schedule 17.10.2015blah/volume/100
похоже, что мы используем глагол a, а RESTful способ - использовать существительные. Ваше предложение очень похоже наblah/changeChannelTo/23
.. - person Matan Givoni   schedule 17.10.2015volume
наchangeVolumeTo
, вы понимаете, что я имею в виду? Если мы отправим сообщение наblah/changeVolumeTo/10
, это означает, что у нас плохой дизайн. - person Matan Givoni   schedule 17.10.2015