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


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

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

2 73

2 ответа:

Удалить для удаления ресурса запроса:

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

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

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

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

С помощью HTTP запроса, глагол, например, сделать, пост, удалить, поставить и т. д... позволяет создавать веб-приложения 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-запросы и ответы.

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