Что произойдет, если я попытаюсь опубликовать один запрос POST с существующей записью в базе данных - PullRequest
1 голос
/ 30 марта 2019

Насколько мне известно, основное различие между методом PUT и POST в REST заключается в том, что запрос POST создаст новую запись, где в качестве запроса PUT обновится существующая запись / создаст новую запись, если она отсутствует.

Теперь мой вопрос таков: Предположим, у нас есть пользователь с Id = 1 и name = "Pritam" в базе данных. Теперь, если я попытаюсь сделать POST-запрос с телом запроса Id = 1 и name = "Pritam", то что произойдет. (Дубликаты записей). будет ли создана новая запись или что именно произойдет.

Пожалуйста, помогите мне понять разницу между методом PUT и POST. Когда использовать PUT и когда использовать POST в сценариях реального времени.

1 Ответ

1 голос
/ 30 марта 2019

Насколько мне известно, основное различие между методом PUT и POST в REST заключается в том, что запрос POST создаст новую запись, где в качестве запроса PUT будет обновлена ​​существующая запись / будет создана новая запись, если она отсутствует.

Это не правильно. (Это также не ваша вина - это недоразумение распространено ). Реальные различия в семантике POST и PUT в настоящее время описаны в RFC 7231

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

Предположим, у нас есть пользователь с Id = 1 и именем = "Pritam" в базе данных. Теперь, если я попытаюсь сделать POST-запрос с телом запроса Id = 1 и name = "Pritam", то что произойдет. (Дубликаты записей). Будет ли создана новая запись или что именно произойдет.

Это детали реализации; это именно то, что REST API изолирует клиента от необходимости понимать (для клиента это просто веб-сайт).

«Правильные» вещи в вашем домене могут быть:

  • создайте нового пользователя в модели вашего домена, используя информацию в теле сообщения POST и, возможно, создавая дубликат, или
  • сообщить клиенту об ошибке из-за конфликта
  • сообщить об успехе клиенту со ссылкой на ранее созданного пользователя

Ничто из этого не происходит по волшебству, вам действительно нужно выбрать то, что имеет смысл для ваших обстоятельств, и реализовать его, а затем выработать правильный способ описания того, что произошло в теле HTTP-ответа, и какую информацию включить в метаданных, чтобы общие компоненты могли разумно участвовать в обмене.

...