Какова полезность методов PUT и DELETE HTTP-запроса?
Я много читал об этом, но не смог получить заключение по этой теме.
но я никогда не использовал методы запроса HTTP PUT или DELETE. Моя тенденция-использовать GET, когда stat системы(мое приложение или веб-сайт) не может быть затронут (например, список продуктов) и использовать POST, когда он затронут(заказ размещен). Разве этого недостаточно или я что-то упускаю ?
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://martinfowler.com/articles/richardsonMaturityModel.html
- доступны ли методы PUT, DELETE, HEAD и т. д. В большинстве веб-браузеров?
- почему в HTML-формах нет методов PUT и DELETE
- следует поставить и удалить используется в формы?
- http://amundsen.com/examples/put-delete-forms/
- http://www.quora.com/HTTP/Why-are-PUT-and-DELETE-no-longer-supported-in-HTML5-forms
С помощью 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 framework, но они могут помочь вам понять, как работают HTTP-запросы и ответы.
надеюсь, что это помогает!