WebAPI только для обмена данными?

#rest #asp.net-web-api #iot #restful-architecture

#rest #asp.net-web-api #iot #restful-архитектура

Вопрос:

Я намерен создать WebAPI для устройства Интернета вещей. Это должно дать мне информацию об аппаратных портах, состоянии устройства и т. Д. Теперь мой вопрос в том, можно ли использовать его для управления некоторыми портами. Например, светодиод, который подключен к выходу устройства Интернета вещей, будет управляться как [GET] /api/led/{id}/on или [GET] /api/led/{id}/ off

Будет ли это противоречить фактическому значению WebAPI?

Ответ №1:

Да — это не очень хорошая структура, поскольку метод GET должен быть идемпотентным и безопасным — см. http://restcookbook.com/HTTP Methods/idempotency / для более подробного определения, но практически говоря, что означает сказать, что это безопасно, так это то, что запрос GET не должен изменять состояние или данные.

Итак:

 GET /api/led/{id}/on
  

должно возвращать представление, указывающее, включено оно или выключено, но фактически не должно изменять состояние светодиода. Он может вернуться true или {"on" : true } , если он был включен, и false если он был выключен — все, что имеет смысл для вашего приложения.

Чтобы включить или выключить его, вы должны использовать небезопасный метод, поэтому вы можете сделать:

 PUT /api/led/{id}/on
  

и сделайте тело true или false , или, возможно {"on":true} , или {"on":false}

или, возможно

 POST /api/led/{id}/on
  

чтобы включить его и

 POST /api/led/{id}/off
  

чтобы отключить его.

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