Какова польза методов запроса PUT и DELETE HTTP?

Я много читал об этом, но не смог получить заключение по этой теме.

Но я никогда не использовал методы запроса PUT или DELETE HTTP. Моя тенденция состоит в том, чтобы использовать GET, когда не может быть затронуто состояние системы (мое приложение или веб-сайт) (например, список продуктов) и использование POST, когда оно затронуто (заказ размещен). Разве это недостаточно или я чего-то не хватает?

Ответ 1

DELETE предназначен для удаления ресурса запроса:

Метод DELETE запрашивает, чтобы исходный сервер удалял ресурс, идентифицированный Request-URI. Этот метод МОЖЕТ быть переопределен вмешательством человека (или другими средствами) на исходном сервере. Клиент не может гарантировать, что операция была выполнена, даже если код состояния, возвращенный с исходного сервера, указывает, что действие было успешно завершено...

PUT предназначен для установки или обновления ресурса на сервере:

Метод PUT запрашивает, чтобы закрытый объект хранился в запрошенном Request-URI. Если Request-URI ссылается на уже существующий ресурс, закрытый объект СЛЕДУЕТ считаться модифицированной версией той, которая находится на исходном сервере. Если Request-URI не указывает на существующий ресурс и что URI может быть определен как новый ресурс запрашивающим пользовательским агентом, исходный сервер может создать ресурс с этим URI...

Для полного посещения спецификации:

Поскольку текущие браузеры, к сожалению, не поддерживают какие-либо другие глаголы, чем POST и GET в HTML-формах, вы обычно не можете использовать HTTP в полной мере с помощью их (вы все равно можете захватить их представление через JavaScript, хотя). Отсутствие поддержки этих методов в формах HTML привело к URI, содержащим глаголы, например,

POST http://example.com/order/1/delete

или даже хуже

POST http://example.com/deleteOrder/id/1

эффективно туннелировать CRUD-семантику по HTTP. Но глаголы никогда не должны были быть частью URI. Вместо этого HTTP уже предоставляет механизм и семантику CRUD для ресурса (например, порядка) с помощью HTTP-методов. HTTP - это протокол, а не только служба туннелирования данных.

Итак, чтобы удалить ресурс на веб-сервере, вы вызываете

DELETE http://example.com/order/1

и для его обновления вы бы назвали

PUT http://example.com/order/1

и предоставить обновленное представление ресурсов в теле PUT для применения веб-сервера.

Итак, если вы создаете своего рода клиент для REST API, вы, вероятно, сделаете его отправкой запросов PUT и DELETE. Это может быть клиент, встроенный в браузер, например. отправка запросов через JavaScript или это может быть какой-то инструмент, работающий на сервере и т.д.

Для получения более подробной информации посетите:

Ответ 2

Использование глагола HTTP Request, такого как GET, POST, DELETE, PUT и т.д., Позволяет создавать веб-приложения RESTful. Читайте об этом здесь: http://en.wikipedia.org/wiki/Representational_state_transfer

Самый простой способ увидеть выгоды от этого - взглянуть на этот пример. Каждая инфраструктура MVC имеет Router/Dispatcher который отображает URL-адреса в actionControllers. Поэтому URL-адрес, подобный следующему: /blog/article/1 будет вызывать blogController::articleAction($id); Теперь этот маршрутизатор знает только об URL или /blog/article/1/

Но если этот маршрутизатор будет знать весь объект HTTP-запроса, а не только URL, он может иметь доступ к глаголу HTTP-запроса (GET, POST, PUT, DELETE...) и многим другим полезным вещам о текущем HTTP-запросе.

Это позволит вам настроить приложение так, чтобы оно могло принимать один и тот же URL-адрес и отображать его на разные actionControllers в зависимости от глагола HTTP-запроса.

Например:

если вы хотите получить статью 1, вы можете сделать это:

GET /blog/article/1 HTTP/1.1

но если вы хотите удалить статью 1, вы сделаете это:

DELETE /blog/article/1 HTTP/1.1

Обратите внимание, что оба HTTP-запроса имеют одинаковый URI,/blog/article/1, единственное отличие - глагол HTTP-запроса. И на основании этого глагола ваш маршрутизатор может вызывать другой actionController. Это позволяет вам создавать аккуратные URL-адреса.

Прочитайте эти две статьи, они могут помочь вам:

Symfony 2 - основы HTTP

Symfony 2 - Маршрутизация

Эти статьи посвящены инфраструктуре Symfony 2, но они могут помочь вам понять, как работают HTTP-запросы и ответы.

Надеюсь это поможет!

Ответ 3

Безопасные методы: получить ресурс/без изменений в ресурсе
Идемпотент: Нет изменений в состоянии ресурса, если запрашивается много раз
Небезопасные методы: создание или обновление ресурса/модификации в ресурсе
Неидемпотент: изменение состояния ресурса, если запрашивается много раз

Согласно вашему требованию:

1) Для безопасной и идемпотентной работы (Fetch Resource) используйте --------- GET METHOD
2) Для небезопасной и неидемпотентной операции (Вставить ресурс) use--------- ПОЧТОВЫЙ МЕТОД
3) Для небезопасной и идемпотентной работы (обновление ресурса) use--------- PUT METHOD
3) Для небезопасной и идемпотентной операции (Удалить ресурс) use--------- УДАЛИТЬ МЕТОД