Какие методы HTTP соответствуют каким методам CRUD?

В программировании в стиле RESTful мы должны использовать методы HTTP в качестве наших строительных блоков. Я немного растерялся, хотя какие методы соответствуют классическим методам CRUD. GET/Read и DELETE/Delete достаточно очевидны.

Однако в чем разница между PUT/POST? Они соответствуют один к одному с созданием и обновлением?

9 ответов

Решение
Create = PUT with a new URI
         POST to a base URI returning a newly created URI
Read   = GET
Update = PUT with an existing URI
Delete = DELETE

PUT может отображаться как на Create, так и на Update в зависимости от наличия URI, используемого с PUT.

POST карты для создания.

Исправление: POST также может отображаться на обновление, хотя обычно оно используется для создания. POST также может быть частичным обновлением, поэтому нам не нужен предложенный метод PATCH.

Весь ключ в том, делаете ли вы идемпотентное изменение или нет. То есть, если действие над сообщением дважды приведет к тому, что "будет" то же самое, как если бы оно было сделано только один раз, у вас есть идемпотентное изменение, и оно должно быть сопоставлено с PUT. Если нет, он отображается на POST. Если вы никогда не разрешаете клиенту синтезировать URL-адреса, PUT довольно близок к Update, и POST прекрасно справляется с Create, но это, безусловно, не единственный способ сделать это; если клиент знает, что он хочет создать /foo/abc и знает, какой контент туда поместить, он прекрасно работает как PUT.

Каноническое описание POST - это когда вы совершаете покупку чего-либо: это действие, которое никто не хочет повторять, не зная об этом. В отличие от этого, предварительная установка адреса отправки заказа может быть выполнена с помощью PUT. Это не имеет значения: вам не нужно отправлять 6 Anywhere Dr, Nowhereville один, два или сто раз: это все тот же адрес. Значит ли это, что это обновление? Может быть... Все зависит от того, как вы хотите написать бэкэнд. (Обратите внимание, что результаты могут не совпадать: вы могли бы сообщить пользователю, когда они последний раз делали PUT, как часть представления ресурса, что обеспечило бы, чтобы повторные PUT не вызывали идентичный результат, но результат все равно быть "таким же" в функциональном смысле.)

Я искал тот же ответ, вот что говорит IBM. IBM Link

POST            Creates a new resource.
GET             Retrieves a resource.
PUT             Updates an existing resource.
DELETE          Deletes a resource.

Прямо сейчас (2016) последние HTTP-глаголы - это GET, POST, PATCH, PUT и DELETE.

обзор

  • HTTP GET - ВЫБРАТЬ / Запрос
  • HTTP PUT - ОБНОВЛЕНИЕ
  • HTTP POST - ВСТАВИТЬ / Создать
  • HTTP PATCH - когда PUT ting полное представление ресурса громоздко и использует большую пропускную способность, например: когда вам нужно частично обновить столбец
  • HTTP УДАЛИТЬ - УДАЛИТЬ

Надеюсь это поможет!

Если вы заинтересованы в разработке API-интерфейсов REST, прочитайте эту новость! сайт онлайн версия репозитория github

Там есть отличное видео-выступление на YouTube от Stormpath, которое на самом деле объясняет это, URL должен быть пропущен до нужной части видео:

Stormpath YouTube видео

Также стоит посмотреть, что это более часа разговоров, но очень интересно, если вы думаете об инвестировании времени в создание REST API.

Это зависит от конкретной ситуации.. но в целом:

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 также является полезной ссылкой:

Метод PUT запрашивает, чтобы вложенный объект был сохранен под предоставленным Request-URI.

[...]

Принципиальное различие между запросами POST и PUT отражается в различном значении Request-URI. URI в запросе POST идентифицирует ресурс, который будет обрабатывать вложенную сущность. Этот ресурс может быть процессом приема данных, шлюзом к другому протоколу или отдельным объектом, который принимает аннотации. Напротив, URI в запросе PUT идентифицирует объект, заключенный в запросе - пользовательский агент знает, для чего предназначен URI, и сервер НЕ ДОЛЖЕН пытаться применить запрос к какому-либо другому ресурсу. Если сервер желает, чтобы запрос был применен к другому URI,

Вообще говоря, это шаблон, который я использую:

  • HTTP GET - ВЫБРАТЬ / Запрос
  • HTTP PUT - ОБНОВЛЕНИЕ
  • HTTP POST - ВСТАВИТЬ / Создать
  • HTTP УДАЛИТЬ - УДАЛИТЬ

Проект Symfony пытается объединить свои методы HTTP с методами CRUD, и их список связывает их следующим образом:

  • GET Получить ресурс с сервера
  • POST Создать ресурс на сервере
  • PUT Обновить ресурс на сервере
  • УДАЛИТЬ Удалить ресурс с сервера

Стоит отметить, что, как говорится на этой странице, "на самом деле многие современные браузеры не поддерживают методы PUT и DELETE".

Из того, что я помню, Symfony "подделывает" PUT и DELETE для тех браузеров, которые не поддерживают их при генерации форм, чтобы попытаться максимально приблизиться к использованию теоретически правильного метода HTTP, даже если браузер не поддерживает Это.

Другие вопросы по тегам