Все довольно просто:
POST
позволяет всему происходить , и оно не ограничивается созданием "подчиненных" ресурсов, но позволяет клиенту "предоставлять"блок данных ... к процессу обработки данных "( RFC 2616 с 9,5 ).POST
означает «Вот те данные, которые вы запрашивали только сейчас» PUT
используется как противоположность GET
.Обычный процесс состоит в том, что вы GET
ресурс, каким-то образом модифицируете его, а затем вы УТВЕРЖДАЕТЕ его обратно на тот же URI, с которого вы его получили.PUT
означает «Пожалуйста, сохраните этот файл по этому URI».
Единообразие PUT
(то есть для хранения файла) позволяет посредникам (например, кэшам) аннулировать любой кэшированныйответы могут иметь именно этот URI (так как они знают, что он собирается измениться).Однородность PUT
также позволяет клиентам (которые это понимают) изменять ресурс, сначала извлекая его (GET
), а затем отправляет измененную копию обратно (PUT
).Это также позволяет клиентам повторять попытки при сбое сети из-за идемпотентности PUT
.
Примечание: использование PUT
для создания ресурсов сомнительно.Хотя это возможно в рамках спецификации, я не считаю это хорошей идеей, так как использование POST для выполнения поиска не является хорошей идеей, так же как туннелирование SOAP через HTTP не является хорошей идеей.AtomPub прямо заявляет, что PUT не используется для создания записей атомов .
POST
s вездесущность обусловлена тем фактом, что HTML определяет <form>
элементы, которые приводят к POSTing application/x-www-form-urlencoded
сущность, с которой получатель может делать все, что пожелает, включая
- создание подчиненных ресурсов (ответ обычно сопровождается
201
ответом и Location
заголовком) - созданиемсовершенно другой ресурс (обычно это ответ
201
и заголовок Location
) - , создающий множество подчиненных и / или не связанных ресурсов (возможно, с простым ответом, указывающим URI созданных ресурсов)
- ничего не делая, кроме возврата ответа (например,
200
или 302
) (случай, когда, возможно, следует использовать GET) - изменение ресурса, который получил сам POST (возврат или перенаправление обратно наобновленный ресурс).
- удалить один или несколько ресурсов.
- любую комбинацию перечисленных выше.
ОТолько тот, кто знает, что произойдет в запросе POST
, - это пользователь, который инициировал запрос (нажав огромную кнопку «Да, я подтверждаю удаление моего профиля Facebook») и сервер, который обрабатывает запрос.Для остального мира запрос непрозрачен и не означает ничего, кроме «этому URI передаются некоторые данные».
Итак, ответ на ваш вопрос заключается в том, что и POST
, и PUT
может использоваться как для создания, так и для обновления.
- POST часто используется для создания ресурсов (например, AtomPub 9.2 )
- Семантика PUT хорошо подходит для изменения ресурсов(например, AtomPub 9.3 )
- POST может использоваться для изменения ресурсов (например, форма www редактирует ваш профиль)
- PUT технически может использоваться для создания ресурсов (хотя ясоветую против этого)