В чем разница между PUT и POST, почему PUT считается идемпотентным? - PullRequest
0 голосов
/ 24 октября 2018

Повсюду [ после прочтения многих постов ] говорится, что PUT является идемпотентом, что означает, что несколько запросов с одинаковыми входными данными приведут к тому же результату, что и самый первый запрос.

Но если мыпоставить тот же запрос с теми же входами с методом POST, затем он будет вести себя как PUT.

Итак, в чем разница между идемпотентом между PUT и POST.

1 Ответ

0 голосов
/ 24 октября 2018

Идея в том, что между POST и PUT должна быть разница, а не в том, что она есть.Для пояснения, POST-запрос в идеале должен создать новый ресурс, тогда как PUT-запрос должен использоваться для обновления существующего.Таким образом, клиент, отправляющий два запроса POST, создаст два ресурса, тогда как два запроса PUT не будут (или, скорее, не должны) вызывать нежелательные изменения.

Если говорить более подробно, идемпотентность означает, что в изолированномСреда множественных запросов от одного и того же клиента никак не влияет на состояние ресурса.Если запрос от другого клиента изменяет состояние ресурса, это не нарушает принцип идемпотентности.Хотя, если вы действительно хотите, чтобы запрос на размещение не переопределил изменения другим одновременным запросом от другого клиента, вы всегда должны использовать etags.Чтобы уточнить, запрос put должен всегда предоставлять etag (полученный из запроса get) последнего состояния ресурса, и только если etag является последним, ресурс должен обновляться, в противном случае должен быть поднят код состояния 412 (Precondition Failed).В случае 412 клиент должен снова получить ресурс и затем попробовать обновить.Согласно REST, это жизненно важно для предотвращения состояния гонки.

Согласно W3C (http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html),

'Методы также могут иметь свойство "идемпотентности" в этом ( кроме вопросов об ошибках или истечении срока действия ) побочные эффекты от N> 0 идентичных запросов такие же, как и для одного запроса. '

...