ПОСТ против ПОЧТЫ в ОТДЫХЕ

Chrome 56 не принимает такие шаблоны (Chrome 56 принимает 11.11. дополнительный) с номером типа, используйте тип как текст как прогресс.

5104
задан Peter Mortensen 22 July 2017 в 11:39
поделиться

6 ответов

В целом:

И ПОМЕЩЕННЫЙ и POST может использоваться для создания.

необходимо ли спросить, "к чему Вы выполняете действие?" для различения то, что необходимо использовать. Давайте предположим разработку API для того, чтобы задать вопросы. Если бы Вы хотите использовать POST тогда, Вы сделали бы это к списку вопросов. Если бы Вы хотите использовать ПОМЕЩЕННЫЙ тогда, Вы сделали бы это к конкретному вопросу.

Большой оба могут использоваться, поэтому который должен я использовать в моем УСПОКОИТЕЛЬНОМ дизайне:

Вы не должны поддерживать и ПОМЕЩЕННЫЙ и POST.

то, Которое используется, оставляют до Вас. Но просто не забудьте использовать правильный в зависимости от того, на какой объект Вы ссылаетесь в запросе.

Некоторые соображения:

  • Вы называете свои объекты URL, которые Вы создаете явно или позволяете серверу решить? Если Вы называете их, тогда используют ПОМЕЩЕННЫЙ. Если Вы позволяете серверу решить тогда POST использования.
  • ПОМЕЩЕННЫЙ идемпотент, поэтому если Вы ПОМЕЩАЕТЕ объект дважды, он не имеет никакого эффекта. Это - хорошее свойство, таким образом, я использовал бы ПОМЕЩЕННЫЙ, если это возможно.
  • можно обновить или создать ресурс с ПОМЕЩЕННЫМ с тем же объектным URL
  • С POST, у Вас может быть 2 запроса, входящие одновременно создание модификаций к URL, и они могут обновить различные части объекта.

пример:

я записал следующее как часть другого ответа на ТАК относительно этого :

POST:

Используемый, чтобы изменить и обновить ресурс

POST /questions/<existing_question> HTTP/1.1
Host: www.example.com/

Примечание, что следующее является ошибкой:

POST /questions/<new_question> HTTP/1.1
Host: www.example.com/

, Если URL еще не создается, Вы не должны использовать POST для создания его при определении имени. Это должно привести к 'ресурсу, не найденному' ошибка, потому что <new_question> еще не существует. Необходимо ПОМЕСТИТЬ <new_question> ресурс на сервере сначала.

Вы могли, хотя делают что-то вроде этого для создания ресурсов с помощью POST:

POST /questions HTTP/1.1
Host: www.example.com/

Примечание, что в этом случае имя ресурса не определяется, новый путь URL объектов, было бы возвращено Вам.

ПОМЕЩЕННЫЙ:

Используемый, чтобы создать ресурс или перезаписать его. В то время как Вы определяете ресурсы новый URL.

Для нового ресурса:

PUT /questions/<new_question> HTTP/1.1
Host: www.example.com/

Для перезаписи существующего ресурса:

PUT /questions/<existing_question> HTTP/1.1
Host: www.example.com/
4060
ответ дан Community 22 July 2017 в 21:39
поделиться

REST очень высокоуровневое понятие. На самом деле это даже не упоминает HTTP вообще!

, Если у Вас есть какие-либо сомнения относительно того, как реализовать REST в HTTP, можно всегда смотреть на Протокол Публикации Atom (AtomPub) спецификация. AtomPub является стандартом для записи УСПОКОИТЕЛЬНЫХ веб-сервисов с HTTP, который был разработан многими HTTP и светила REST, с некоторым входом от Roy Fielding, изобретателя REST и (co-) изобретатель HTTP сам.

На самом деле, Вы могли бы даже быть в состоянии использовать AtomPub непосредственно. В то время как это вышло из ведущего блог сообщества, это никоим образом не ограничивается блоггингом: это - универсальный протокол для того, чтобы УСПОКОИТЕЛЬНО взаимодействовать с произвольными (вложенными) наборами произвольных ресурсов через HTTP. Если можно представить приложение как вложенный набор ресурсов, то можно просто использовать AtomPub и не волноваться о том, использовать ли ПОМЕЩЕННЫЙ или POST, что Коды состояния HTTP возвратиться и все те детали.

Это - то, что AtomPub должен заявить о создании ресурса (разделите 9.2):

Для добавления участников к Набору клиенты отправляют запросы POST к URI Набора.

65
ответ дан Xan 22 July 2017 в 21:39
поделиться
  • 1
    Дампы памяти являются просто большими, все же получать их не тривиально. It' s намного более вероятно, что программа случайно отправляет сами данные. – sharptooth 8 November 2012 в 10:16

Используйте POST, чтобы создать, и ПОМЕСТИТЬ в обновление. Это - то, как Ruby on Rails делает его, так или иначе.

PUT    /items/1      #=> update
POST   /items        #=> create
123
ответ дан Peter Mortensen 22 July 2017 в 21:39
поделиться
  • 1
    @sharptooth: Тогда вероятно, что авторы SecureZeroMemory лет знают, что использование volatile препятствует тому, чтобы оптимизатор Visual C++ оптимизировал код далеко. Авторы SecureZeroMemory лет дают определенные гарантии о функции, таким образом, это - их задание, чтобы гарантировать, что оптимизатор не освобождает те гарантии. – Bart van Ingen Schenau 8 November 2012 в 09:14
  • POST для URL создает дочерний ресурс на сервере, определенном URL.
  • PUT в URL-адрес создает / полностью заменяет ресурс на определенном клиентом URL .
  • ПАТЧ к URL-адресу обновляет часть ресурса по этому определенному клиентом URL-адресу.

Соответствующая спецификация для PUT и POST - RFC 2616 §9.5ff.

POST создает дочерний ресурс , поэтому POST to / items создает ресурсы, которые находятся в ресурсе / items . Например. / items / 1 . Отправка одного и того же почтового пакета дважды создаст два ресурса.

PUT предназначен для создания или замены ресурса по URL-адресу , известному клиенту .

Следовательно: PUT - это только кандидат на CREATE, когда клиент уже знает URL-адрес до создания ресурса. Например. / blogs / nigel / entry / when_to_use_post_vs_put , поскольку заголовок используется в качестве ключа ресурса

PUT заменяет ресурс по известному URL-адресу, если он уже существует, поэтому отправка одного и того же запроса дважды не имеет эффект. Другими словами, вызовы PUT являются идемпотентными .

RFC читается следующим образом:

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

Примечание: PUT в основном использовался для обновления ресурсов (путем их полной замены), но в последнее время наблюдается движение к использованию PATCH для обновления существующих ресурсы, поскольку PUT указывает, что он заменяет весь ресурс. RFC 5789.

Обновление 2018 г. : есть случай, который можно сделать, чтобы избежать PUT. См. «REST без PUT».

С помощью техники «REST без PUT» идея состоит в том, что потребители вынуждены публиковать новые «именные» ресурсы запроса. Как обсуждалось ранее, изменение почтового адреса клиента - это POST для нового ресурса ChangeOfAddress, а не PUT ресурса "Customer" с другим полем почтового адреса. ценить.

взято из REST API Design - Resource Modeling by Prakash Subramaniam of Thoughtworks

Это заставляет API избегать проблем с переходом между состояниями, когда несколько клиентов обновляют один ресурс, и более точно соответствует источнику событий и CQRS. Когда работа выполняется асинхронно, кажется целесообразным выполнить POST-преобразование и дождаться его применения.

683
ответ дан 22 November 2019 в 19:37
поделиться

В Интернете можно найти утверждения, в которых

Ни то, ни другое не совсем верно.


Лучше выбирать между PUT и POST на основе идемпотентности действия.

PUT подразумевает размещение ресурса - полную замену всего, что доступно по данному URL-адресу, другим. По определению PUT идемпотентен. Сделайте это столько раз, сколько захотите, и результат будет тот же. x = 5 идемпотентно. Вы можете ПОСТАВИТЬ ресурс независимо от того, существовал он ранее или нет (например, для создания или обновления)!

POST обновляет ресурс, добавляет дополнительный ресурс или вызывает изменение. POST не является идемпотентным, как и x ++ не идемпотентным.


Согласно этому аргументу, PUT предназначен для создания, когда вы знаете URL-адрес того, что вы создаете. POST можно использовать для создания, когда вы знаете URL-адрес «фабрики» или менеджера для категории вещей, которые вы хотите создать.

так:

POST /expense-report

или:

PUT  /expense-report/10929
2148
ответ дан 22 November 2019 в 19:37
поделиться

Дополнение ко всем ответам выше:

<час>

Обычно используемый в профессиональной практике,

<час>
  • мы используем ПОМЕЩЕННЫЙ по POST в , СОЗДАЮТ операция. Почему? потому что многие здесь сказали также, ответы не являются кэшируемыми, в то время как POST - (Потребуйте Довольного Местоположения и истечения).
  • Мы используем POST по ВСТАВЛЕННОМУ ОБНОВЛЕНИЕ операция. Почему? потому что это делает недействительным кэшируемые копии всего, содержащего ресурс. который полезен при обновлении ресурсов.
0
ответ дан 22 November 2019 в 19:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: