Подтвердить что ты не робот

Разве HTTP-глагол PUT не используется для обновления и не создает контент?

В CouchDB для создания нового документа, который вы отправляете:

PUT /albums/70b50bfa0a4b3aed1f8aff9e92dc16a0

Разве PUT не используется для обновления данных и не создает его?

4b9b3361

Ответ 1

Ключевым термином для PUT для меня всегда является idempotent. В то время как для POST вы всегда добавляете другой элемент в состояние системы, при PUT действие выполняется одинаково, даже если выполняется несколько раз (потому что вы обращаетесь к элементу).

Пример:

выполнение 100-кратного POST/альбомов = у вас будет 100 разных альбомов (но с тем же контентом)

выполнение 100-кратного PUT/альбомов/123 = у вас будет один альбом с идентификатором 123 (с контентом)

Ответ 2

Он используется для обоих. Цитата RFC:

Метод PUT запрашивает, чтобы закрытый объект хранился в запрошенном Request-URI. Если Request-URI ссылается на уже существующий ресурс, закрытый объект СЛЕДУЕТ считаться модифицированной версией той, которая находится на исходном сервере. Если Request-URI не указывает на существующий ресурс и что URI может быть определен как новый ресурс запрашивающим пользовательским агентом, исходный сервер может создать ресурс с этим URI.

Ответ 3

PUT действительно используется для обновления содержимого, но если у вас уже есть идентификатор, вы обновляете. В REST в общем случае вы могли бы POST до /albums (или что-то еще) создать новую запись с еще неизвестным идентификатором. Поскольку у вас есть идентификатор, вы обновляете пустой документ с этим идентификатором до содержимого, которое вы предоставляете.

Ответ 4

PUT - создать новый или полностью заменить существующий ресурс, когда вы знаете существующий URI или какой новый URI будет. POST предназначен для обновления частей существующего ресурса или для создания нового ресурса, когда серверу необходимо назначить новый URI. Это так просто. И PUT, и POST используются для создания и обновления, это не о том, если вы создаете или обновляете, то о том, знаете ли вы URI или вам нужен сервер, чтобы назначить его для вас.