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

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

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

2 ответов


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

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

ставим это для размещения или обновления ресурса на сервере:

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

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

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

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 или какой-то инструмент, работающий на сервере, и т. д.

для некоторых более подробности визита:


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

самый простой способ увидеть преимущества от этого-посмотреть на этот пример. Каждая структура MVC имеет Router/Dispatcher, который сопоставляет URL-ов контроллерам действий. Поэтому 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-s.

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

в Symfony 2 от HTTP основы

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

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

надеюсь, что это помогает!