Метод HTTP для представления действий "огонь и забвение" в службе RESTful

Думая о REST, относительно легко сопоставить HTTP-методы с CRUD-действиями: POST для создания, GET для чтения и т.д. Но как насчет действий "огонь и забыть"? Какой метод HTTP лучше всего будет представлять собой огонь и забыть действие, такое как запуск пакетного задания (в котором никакой ответ не отправляется обратно вызывающему абоненту)?

POST будет spring, но я думаю, что GET также является подходящим методом, потому что в 99% случаев вы предоставляете только набор параметров для этих типов действий. Как вы думаете?

5 ответов

POST будет spring, но я думаю, что GET - это более подходящий метод, потому что 99% времени вы предоставляете только набор параметров для этих типов действий. Как вы думаете?

Внешнее состояние

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

Ресурсы BatchJob

В вашем примере, если пакетное задание не влияет на внешнее видимое состояние любого объекта, вы можете реализовать его как пакетное задание. Однако вы можете смоделировать свое пакетное задание как ресурс с соответствующим контейнером ресурсов.

Вы можете использовать сообщение для создания нового ресурса BatchJob и разрешить пользователю делать GET, чтобы увидеть ход выполнения задания. Вы можете сделать GET в контейнере ресурсов, чтобы отобразить все запущенные пакетные задания, возможно, вызвав DELETE, чтобы убить его.


Вы должны использовать POST, если ваш запрос изменяет данные, и GET, если он только читает его.

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


Я думаю, что в общем случае мы могли бы поставлять различные параметры полезной нагрузки, и они, вероятно, могли бы превысить возможности GET, поэтому POST вполне разумен - действие запуска задания не соответствует мне с GAT-семантикой.

Можно подумать, что действие не может фактически вернуть ответ:

а). Нет, сэр, это невозможный запрос, с которого мы не можем начать работу. б). Понятно, что ваше задание - 93.


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

Теперь, когда CORS распространен, выбор между использованием GET или POST становится вопросом, хотите ли вы, чтобы любой, кто знает ваш URI API, мог запускать пакетное задание (GET), или если вы хотите ограничить источник запроса, чтобы не допустить, чтобы какой-либо Джо с компьютером запускал задание (POST).


Если вы обеспокоены этим уровнем, возможно, HEAD - это метод HTTP, который вы хотите; он идентичен GET, при условии, что тело ответа пусто. Это звучит для меня то, о чем вы просите?

licensed under cc by-sa 3.0 with attribution.