В программировании в стиле RESTful мы должны использовать методы HTTP в качестве наших строительных блоков. Я немного запутался, хотя какие методы соответствуют классическим методам CRUD. GET / Read и DELETE / Delete достаточно очевидны.
Однако в чем разница между PUT / POST? Они соответствуют один к одному с созданием и обновлением?
http
rest
crud
http-method
Нарисовался
источник
источник
Весь ключ в том, делаете ли вы идемпотентное изменение или нет. То есть, если выполнение действия над сообщением дважды приведет к тому, что «будет» то же самое, как если бы оно было сделано только один раз, вы получите идемпотентное изменение, и оно должно быть сопоставлено с PUT. Если нет, он отображается на POST. Если вы никогда не разрешаете клиенту синтезировать URL-адреса, PUT довольно близок к Update, и POST прекрасно справляется с Create, но это, безусловно, не единственный способ сделать это; если клиент знает, что он хочет создать,
/foo/abc
и знает, какой контент туда поместить, он прекрасно работает как PUT.Каноническое описание POST - это когда вы совершаете покупку чего-либо: это действие, которое никто не хочет повторять, не зная об этом. В отличие от этого, предварительная установка адреса отправки для заказа может быть выполнена с помощью PUT очень хорошо: не имеет значения, если вам говорят, отправлять
6 Anywhere Dr, Nowhereville
один, два или сто раз: это все тот же адрес. Значит ли это, что это обновление? Может быть ... Все зависит от того, как вы хотите написать бэкэнд. (Обратите внимание, что результаты могут не совпадать: вы могли бы сообщать пользователю, когда они последний раз делали PUT, как часть представления ресурса, что гарантировало бы, что повторные PUT не вызывают идентичный результат, но результат все равно будет быть «таким же» в функциональном смысле.)источник
POST
иPUT
является интересным и должно дать ответ на вопрос «Что такое« создавать », а что« обновлять »?» это намного понятнее. Кроме того, что касается реализации API, из этого следует, что повторениеPUT
должно равносильно неактивному бездействию, тогда как повторениеPOST
может вызвать исключение, если предполагается, что некоторый аспект отправляемых данных остается уникальным в хранилище данных. это поддерживает приложение.Я искал тот же ответ, вот что говорит IBM. IBM Link
источник
Там есть отличное видео-выступление на YouTube от Stormpath, которое на самом деле объясняет это, URL должен быть пропущен до нужной части видео:
Stormpath YouTube видео
Также стоит посмотреть, что это более часа разговоров, но очень интересно, если вы думаете об инвестировании времени в создание REST API.
источник
Прямо сейчас (2016) последние HTTP-глаголы - это GET, POST, PATCH , PUT и DELETE.
обзор
Надеюсь это поможет!
Если вы заинтересованы в разработке API-интерфейсов REST, прочитайте эту новость! сайт онлайн-версия репозитория github
источник
Это зависит от конкретной ситуации .. но в целом:
PUT = обновить или изменить конкретный ресурс с конкретным URI ресурса.
POST = создать новый ресурс под источником данного URI.
Т.е.
Редактировать сообщение в блоге:
PUT: / блог / запись / 1
Создайте новый:
POST: / блог / запись
PUT может создать новый ресурс в некоторых случаях, когда URI нового ресурса очищен перед запросом. POST также может использоваться для реализации нескольких других вариантов использования, которые не охватываются другими (GET, PUT, DELETE, HEAD, OPTIONS)
Общее понимание для систем CRUD: GET = запрос, POST = создание, Put = обновление, DELETE = удаление
источник
Стандартными блоками REST являются ресурсы (и URI) и гипермедиа. В этом контексте
GET
это способ получить представление ресурса (который действительно может быть отображенSELECT
в терминах CRUD).Однако не обязательно ожидать однозначного сопоставления между операциями CRUD и глаголами HTTP. Основное различие между
PUT
иPOST
заключается в их идемпотентном свойстве.POST
также чаще используется для частичных обновлений, так какPUT
обычно подразумевает отправку полного нового представления ресурса.Я бы предложил прочитать это:
Спецификация HTTP также является полезной ссылкой:
источник
Вообще говоря, это шаблон, который я использую:
источник
Проект Symfony пытается объединить свои методы HTTP с методами CRUD, и их список связывает их следующим образом:
Стоит отметить, что, как говорится на этой странице, «на самом деле многие современные браузеры не поддерживают методы PUT и DELETE».
Из того, что я помню, Symfony "подделывает" PUT и DELETE для тех браузеров, которые не поддерживают их при генерации форм, чтобы попытаться максимально приблизиться к использованию теоретически правильного метода HTTP, даже если браузер не поддерживает Это.
источник