#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, но некоторые из них могут быть более или менее понятны потребителю в зависимости от стандартной терминологии / семантики в вашем контексте.