Мне нужно вызвать процесс, который не требует ввода от пользователя, только триггер. Я планирую использовать POST/URI без тела для запуска процесса. Я хочу знать, считается ли это плохим с точки зрения HTTP и REST?
Считается ли плохой практикой выполнение HTTP POST без тела объекта?
Ответ 1
Я задал этот вопрос рабочей группе IETF HTTP несколько месяцев назад. Краткий ответ: НЕТ, это не плохая практика (но я предлагаю прочитать ветку для более подробной информации).
Ответ 2
Использование POST вместо GET является вполне разумным, так как он также инструктирует сервер (и шлюзы по пути) не возвращать кешированный ответ.
Ответ 3
POST полностью в порядке. В отличие от GET с POST вы меняете состояние системы (скорее всего, ваш триггер "что-то делает" и меняет данные).
Я использовал POST уже без полезной нагрузки, и он "чувствует" "ОК". Одна вещь, которую вы должны делать при использовании POST без полезной нагрузки: Pass header Content-Length: 0
. Я помню проблемы с некоторыми прокси, когда api-client не передавал его.
Ответ 4
Если вы используете POST/uri без тела, это что-то вроде использования функции, которая не принимает аргумент .e.g int post (void); поэтому разумно иметь функцию для вашего класса ресурсов, которая может изменять состояние объекта без аргумента. Если вы считаете, что для URI используется функция Unix touch, это не лучший выбор?
Ответ 5
Я использовал Post вместо Get, потому что операция изменит состояние данных, в некоторых случаях операция создаст дочерние или вложенные объекты.
Ответ 6
Да, это нормально, чтобы отправить запрос POST без тела и вместо этого использовать параметры строки запроса. Но будьте осторожны, если ваши параметры содержат символы, которые не являются действительными HTTP, вам придется их кодировать.
Например, если вам нужно POST 'hello world' до конечной точки, вы должны сделать так, чтобы это выглядело следующим образом: http://api.com?param=hello%20world