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