Я разрабатываю API для перехода по HTTP, и мне интересно, если использовать команду HTTP POST, но только с параметрами запроса URL и без тела запроса, это хороший способ.
Вопросы:
- "Хороший веб-дизайн" требует, чтобы не-идемпотентные действия отправлялись через POST. Это не-идемпотентное действие.
- Легче разрабатывать и отлаживать это приложение, когда параметры запроса присутствуют в URL-адресе.
- API не предназначен для широкого использования.
- Кажется, что сделать запрос POST без тела займет немного больше работы, например. a
Content-Length: 0
должен быть явно добавлен. - Мне также кажется, что POST без тела немного противоречит ожиданиям разработчиков и HTTP-фреймворков.
Есть ли еще недостатки или преимущества для отправки параметров в запрос POST через URL-запрос, а не в тело запроса?
Изменить: причина этого в том, что операции не являются идемпотентными и имеют побочные эффекты, кроме поиска. См. спецификацию HTTP:
В частности, конвенция была что GET и HEAD методы НЕ ДОЛЖНЫ значимость принятия другого чем поиск. Эти методы должны считаться "безопасным". Это позволяет пользователю агенты для представления других методов, таких как POST, PUT и DELETE, в особым образом, чтобы пользователь был создан осознавая тот факт, что возможно запрашивается небезопасное действие.
...
Методы могут также обладать свойством "идемпотентность" в этом (кроме ошибки или срока действия) побочные эффекты N > 0 одинаковы запросы такие же, как для одного запрос. Методы GET, HEAD, PUT и DELETE делятся этим свойством. Также, методы ВАРИАНТЫ и ТРАСЕ СЛЕДУЕТ НЕ имеют побочных эффектов, и поэтому по сути, идемпотент.