Какие методы HTTP соответствуют каким методам CRUD?
в программировании стиля RESTful мы должны использовать методы HTTP в качестве наших строительных блоков. Я немного смущен, хотя какие методы соответствуют классическим методам CRUD. GET/Read и DELETE / Delete достаточно очевидны.
однако, в чем разница между PUT / POST? Соответствуют ли они один к одному с Create и Update?
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 может сопоставлять как создание, так и обновление в зависимости от существования URI, используемого с PUT.
разместить карты для создания.
исправление: POST также может отображать обновление, хотя обычно используется для создания. Сообщение также может быть частичным обновлением, поэтому нам не нужен предлагаемый метод исправления.
все ли вы делаете идемпотентных изменить или нет. То есть, если действие над сообщением дважды приведет к тому, что "то же самое" будет там, как если бы это было сделано только один раз, у вас есть идемпотентное изменение, и оно должно быть сопоставлено с PUT. Если нет, он сопоставляется с POST. Если вы никогда не разрешаете клиенту синтезировать URL-адреса, PUT довольно близок к обновлению, и POST может обрабатывать создание просто отлично, но это, безусловно, не единственный способ сделать это; если клиент знает, что он хочет создать /foo/abc
и знает, какой контент положить туда, он отлично работает как положить.
каноническое описание поста - это когда вы совершаете покупку чего-то: это действие, которое никто не хочет повторять, не зная об этом. Напротив, установка адреса отправки для заказа заранее может быть выполнена с помощью PUT just fine: не имеет значения, сказали ли вам отправить в 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.
есть отличный YouTube видео разговор stormpath с на самом деле объясняет это, URL должен перейти к правильной части видео:
также стоит посмотреть, что это более часа разговора, но очень интересно, если вы думаете инвестировать время в создание REST api.
Это зависит от конкретной ситуации.. но в общем:
PUT = обновить или изменить конкретный ресурс с конкретным URI ресурса.
POST = создать новый ресурс под источник данного URI.
то есть
редактировать записи в блоге:
PUT: /блог/вход/1
создать новый:
пост: / блог / запись
PUT может создать новый ресурс в некоторых случаях, когда URI нового ressource перед запросом понятен. POST можно использовать и для реализации нескольких других вариантов использования, которые не охватываются другими (GET, PUT, DELETE, HEAD, OPTIONS)
общее понимание для систем CRUD-GET = request, POST = create, Put = update, DELETE = delete
прямо сейчас (2016) последние http глаголы GET, POST,патч, поставить и удалить
обзор
- HTTP-запрос GET - выберите/запрос
- HTTP PUT-UPDATE
- HTTP POST - INSERT/Create
- адресу http патч - когда поставитьting полное представление ресурса громоздко и использует больше пропускной способности, например: когда вам нужно частично обновить столбец
- HTTP УДАЛИТЬ - Удалить
надеюсь, что это помогает!
Если вы заинтересованы в разработке REST API, это ansewome чтение, чтобы иметь! веб-сайт онлайн-версия github хранилище
строительные блоки REST-это в основном ресурсы (и URI) и гипермедиа. В этом контексте GET
- Это способ получить представление ресурса (который действительно может быть сопоставлен с SELECT
в терминах CRUD).
однако вы не обязательно должны ожидать сопоставления один к одному между операциями CRUD и HTTP-глаголами.
Основное различие между PUT
и POST
об их идемпотентном свойстве. POST
также чаще используется для частичного обновления, как PUT
обычно подразумевает отправку полного нового представления ресурса.
Я бы предложил прочитать это:
- http://roy.gbiv.com/untangled/2009/it-is-okay-to-use-post
- http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven
на спецификация HTTP тоже полезная ссылка:
метод PUT запрашивает, чтобы закрытый сущности храниться под поставила запрос URI.
[...]
принципиальная разница между Запросы POST и PUT отражены в различное значение Запрос URI. URI в запросе POST определяет ресурс, который будет обработайте вложенный объект. Что ресурс может принимать данные процесс, врата в другие протокол или отдельный объект, который принимает аннотации. В отличие от URI в PUT запрос идентифицирует объект, вложенный в запрос -- агент пользователя знает, что такое URI предназначен и сервер не должен пытаться применить запрос к некоторым другой ресурс. Если сервер желает этот запрос применяется к другой URI,
вообще говоря, это шаблон, который я использую:
- HTTP-запрос GET - выберите/запрос
- HTTP PUT-UPDATE
- HTTP POST - INSERT/Create
- HTTP DELETE-УДАЛИТЬ
на Symfony проект пытается сохранить свои методы HTTP, соединенные с методами CRUD, и их список связывает их следующим образом:
- получить извлечение ресурса с сервера
- POST создайте ресурс на сервере
- поставить обновление ресурса на сервер
- DELETE удалить ресурс с сервера
стоит отметить, что, как говорится на этой странице, " на самом деле многие современные браузеры не поддерживают методы PUT и DELETE."
из того, что я помню, Symfony "подделывает" PUT и DELETE для тех браузеров, которые не поддерживают их при генерации своих форм, чтобы попытаться быть как можно ближе к использованию теоретически правильного метода HTTP, даже если браузер его не поддерживает.