Запуск действия POST или PUT - PullRequest
       23

Запуск действия POST или PUT

0 голосов
/ 26 ноября 2018

Я прочитал PUT против POST в REST в полном объеме, а также w3 docs , но все еще не уверен, что правильный подход.

Если я хочу включить нагреватель:

POST /house/123/

{"appliance" : "heater" , "action" : "on"}

или

PUT /house/123/

{"appliance" : "heater" , "action" : "on"}

или мне следует использовать какой-то другой метод?Я думаю, что ни один из них не решает рассматриваемый вопрос, поскольку здесь не происходит создания объектов ...

РЕДАКТИРОВАТЬ:

Что если я просто включаю /выкл.Скорее это перезагрузка.Думайте об этом как о чем-то, что должно произойти.Не обязательно должна быть смена состояния.

/house/123/

{"action" : "reboot-heater"}

1 Ответ

0 голосов
/ 26 ноября 2018

Оба метода подходят в различных обстоятельствах.

POST является универсальным методом - вы можете использовать его для чего угодно, хотя часто есть лучшие варианты (например, GET, когдаоперация безопасна).HTML поддерживает только GET и POST и является языком общения в Интернете.Таким образом, вы можете сделать вывод, что POST в порядке.

PUT также работает;это аналогично «сохранить», «заменить», «upsert».Проблема с PUT заключается в том, что семантика заключается в том, что полезная нагрузка запроса представляет собой замену для текущего состояния целевого ресурса.

В действительности это означает, что

PUT /house/123/

{"appliance" : "heater" , "action" : "on"}

должно быть полной заменой состояния /house/123.Это, вероятно, , а не , что вы хотите, если предположить, что состояние дома включает в себя описания других приборов, комнат, жильцов, местоположения и т. Д.

Вы можете залатать дом, описывая измененияк обогревателю с накладным документом.Но это ослабляет семантику идемпотентов, которая является важным преимуществом PUT.

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

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

Хорошее чтение, если у вас есть время, это RESTful Casuistry , где кучалюди обсуждают, каким должен быть протокол RESTful для запроса на отключение сервера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...