Я просто хотел что-то добавить к принятому ответу, потому что его определение http verbs
неверно. Все они имеют спецификацию, которой «следует» следовать, и вы можете создавать / обновлять / удалять с несколькими http verbs
на основе спецификаций.
Я собираюсь выделить некоторые важные биты в RFC 2616 от W3
Я собираюсь начать с PUT
, потому что, по моему мнению, это наиболее запутанно.
PUT is used for both create/update PUT updates by completely replacing the resource on the server with the resource sent in the request
Например
Вы делаете этот вызов на мой API
PUT /api/person
{
Name: John,
email: jdoe@hra.com
}
мой сервер имеет этот ресурс на сервере
{
Name: Jane,
email: jdoe@hra.com
}
Теперь мой существующий ресурс полностью заменен тем, что вы отправили, и это то, что у меня есть на моем сервере.
{
Name: John,
email: jdoe@hra.com
}
Так что если вы PUT
и отправите только электронное письмо в теле
PUT /api/person
{
email: jdoe@hra.com
}
Мой сервер полностью заменит сущность
{
Name: Jane,
email: jdoe@hra.com
}
С
{
email: jdoe@hra.com
}
И Имя исчезнет. Частичные обновления предназначены для PATCH
, но я все равно использую POST
.
One of the main reasons why we create/update with put is because it is idempotent.
Это просто причудливый термин, и его основное определение состоит в том, что несколько одинаковых запросов одинаковы для одного запроса.
Пример * +1049 *
Предположим, я PUT
файл в api/file
, если сервер-источник не найдет этот файл, он его создаст. Если он найдет файл, он полностью заменит старый файл тем, который я отправил. Это гарантирует, что один файл когда-либо будет создан и обновлен. Если файл не существует, и вы вызываете PUT
5 раз, то при первом создании файла он затем заменяется другим файлом с тем, что вы отправляете. над. Если вы позвоните POST
5 раз, чтобы создать его, будет создано 5 файлов.
You PUT to that exact URI. If you don't you have to send a 301 (Moved Permanently) to the user and allow then make a choice whether or not to redirect the request. Most times the server you PUT to usually hosts the resource and takes care of updating it
Это основные моменты, когда использовать PUT
Что касается POST
You can also create/update and then some...
Как я упоминал выше, есть несколько ключевых отличий.
- Пост более общий. В каких случаях? некоторые другие примеры включают в себя шлюз к другим протоколам, он может принять ответ и отправить его какому-нибудь обработчику данных в середине того же дня, или он может расширить какую-то функциональность.
- Публикация не имеет ограничения "Например, к точному URI или уведомлению".
POST
может добавить ресурс в существующую коллекцию и решить, где он хранится.
А как насчет Delete
Почему бы мне просто не POST
?
Когда вы DELETE
, сервер НЕ ДОЛЖЕН отвечать success , если вы не удалите ресурс или не переместите его в недоступное место во время отправки ответа .
Почему это важно? Что если вы позвоните по номеру DELETE
, но ресурс должен пройти «УТВЕРЖДЕНИЕ» перед удалением? Если удаление может быть отклонено, вы не можете отправить успешный код ошибки, и если вы действительно следуете основным спецификациям, это сбивает с толку вызывающего. Просто пример, я уверен, что вы можете думать о многих других.
Я только что выделил некоторые основные моменты, когда следует использовать общий Http verbs