Билл Веннерс: В своем блоге, озаглавленном «Почему REST Failed», вы сказали, что нам нужны все четыре глагола HTTP - GET, POST, PUT и DELETE, - и посетовали, что поставщики браузеров только GET иPOST. «Зачем нам нужны все четыре глагола? Почему недостаточно GET и POST?
Эллиот Расти Гарольд: В HTTP существует четыре основных метода: GET, POST, PUT,и DELETE. GET используется большую часть времени. Он используется для всего, что безопасно, не вызывает побочных эффектов. GET может быть добавлен в закладки, кэширован, связан, пропущен через прокси-сервер. Это оченьмощная операция, очень полезная операция.
POST, напротив, пожалуй, самая мощная операция. Она может делать все что угодно. Нет пределов тому, что может произойти, и в результате вы должны быть очень осторожны.с ним. Вы не закладываете его. Вы не кэшируете его. Вы не извлекаете его заранее. Вы ничего не делаете с POST, не спрашивая пользователя. Хотите ли вы сделать это? Если пользовательнажимает кнопку, вы можетеПОСТ ПОЛУЧИТЬ некоторый контент.Но вы не собираетесь смотреть на все кнопки на странице и начать случайное нажатие на них.В противоположность этому браузеры могут просматривать все ссылки на странице и предварительно извлекать их, или предварительно извлекать те, которые, по их мнению, наиболее вероятно последуют далее.И действительно, некоторые браузеры, расширения Firefox и другие инструменты пытались сделать это в тот или иной момент.
PUT и DELETE находятся в середине между GET и POST.Разница между PUT или DELETE и POST заключается в том, что PUT и DELETE * идемпотентны, тогда как POST нет.PUT и DELETE могут быть повторены при необходимости.Допустим, вы пытаетесь загрузить новую страницу на сайт.Скажем, вы хотите создать новую страницу на http://www.example.com/foo.html,, поэтому вы вводите свой контент и помещаете его по этому URL.Сервер создает эту страницу по указанному вами URL.Теперь давайте предположим, что по какой-то причине ваше сетевое соединение обрывается.Вы не уверены, запрос прошел или нет?Возможно, сеть работает медленно.Возможно, возникла проблема с прокси-сервером.Поэтому вполне нормально попробовать это снова или снова - столько раз, сколько захотите.Потому что ПОДКЛЮЧЕНИЕ одного и того же документа к одному и тому же URL десять раз не будет отличаться от размещения его один раз.То же самое верно для удаления.Вы можете УДАЛИТЬ что-нибудь десять раз, и это то же самое, что удалить это один раз.
В отличие от этого, POST может каждый раз вызывать что-то другое.Представьте, что вы выходите из интернет-магазина, нажав кнопку покупки.Если вы отправите этот запрос POST снова, вы можете в конечном итоге купить все в вашей корзине во второй раз.Если вы отправите его снова, вы купили его в третий раз.Вот почему браузеры должны быть очень осторожны с повторением операций POST без явного согласия пользователя, потому что POST может вызвать две вещи, если вы сделаете это дважды, три вещи, если вы сделаете это три раза.С PUT и DELETE существует большая разница между нулевыми запросами и одним, но нет разницы между одним запросом и десятью.
Пожалуйста, посетите URL для более подробной информации. http://www.artima.com/lejava/articles/why_put_and_delete.html
Обновление:
Идемпотентные методы Идемпотентный HTTP-метод - это HTTP-метод, который можно вызывать много раз без разных результатов.Не имеет значения, если метод вызывается только один раз или десять раз.Результат должен быть таким же.Опять же, это относится только к результату, а не к самому ресурсу.Этим все еще можно манипулировать (например, отметкой времени обновления, при условии, что эта информация не используется совместно в (текущем) представлении ресурса.
Рассмотрим следующие примеры:
a = 4;
a ++;
Первый пример идемпотентен: независимо от того, сколько раз мы выполняем этот оператор, a всегда будет 4. Второй пример не идемпотентен. Выполнение этого 10 разприведет к другому результату, как при выполнении 5 раз. Поскольку оба примера меняют значение a, оба являются небезопасными методами.