Я разрабатываю API для перехода по HTTP, и мне интересно, если использовать команду HTTP POST, но только с параметрами URL-запроса и без тела запроса, это хороший способ.HTTP POST с параметрами запроса URL - хорошая идея или нет?
соображение:
- "Хороший веб-дизайн" требует без идемнотентных действий для отправки через POST. Это не-идемпотентное действие.
- Легче разрабатывать и отлаживать это приложение, когда параметры запроса присутствуют в URL-адресе.
- API не предназначен для широкого использования.
- Кажется, что сделать запрос POST без тела займет немного больше работы, например. заголовок
Content-Length: 0
должен быть явно добавлен. - Мне также кажется, что POST без тела немного противоречит ожиданиям большинства разработчиков и HTTP-фреймворков.
Есть ли еще недостатки или преимущества для отправки параметров по запросу POST через запрос URL, а не тело запроса?
Редактировать: причина этого в том, что операции не являются идемпотентными и имеют побочные эффекты, кроме поиска. См the HTTP spec:
В частности, соглашение было установлено, что GET и ГОЛОВА методов не должен иметь значения принимает меры другого , чем извлечение. Эти методы должны быть считаться «безопасными». Это позволяет пользователям агентам представлять другие способы, , такие как POST, PUT и DELETE, в специальном режиме , так что пользователь получает , осознавая тот факт, что запрашивается возможное опасное действие, возможно, .
...
Методы могут также обладать свойством «идемпотентности» в том, что (кроме вопросов ошибок или истечения срока действия) в побочных эффектов N> 0 идентичных запросов такого же, как для один запрос . Методы GET, HEAD, PUT и DELETE делятся этим свойством. Кроме того, методы OPTIONS и TRACE SHOULD НЕ имеют побочных эффектов, а также неотъемлемо идемпотент.
Зачем использовать POST вообще, если вы не собираетесь предоставлять данные в теле? –
Поскольку операция не является идемпотентной. –
Что вы пытаетесь сделать, это не идемпотент, а не настоящий POST? Кажется, что либо ваш дизайн REST имеет некоторые проблемы, либо взаимодействие, которое вы пытаетесь создать, не поддается интерфейсу RESTful. Возможно, мы сможем помочь вам сформулировать лучший интерфейс REST, если вы дадите более подробную информацию. – Jared