Код ответа HTTP для POST, когда ресурс уже существует - PullRequest
698 голосов
/ 30 сентября 2010

Я создаю сервер, который позволяет клиентам хранить объекты. Эти объекты полностью сконструированы на стороне клиента, дополнены идентификаторами объектов, которые являются постоянными в течение всего времени жизни объекта.

Я определил API, чтобы клиенты могли создавать или изменять объекты с помощью PUT:

PUT /objects/{id} HTTP/1.1
...

{json representation of the object}

{id} - это идентификатор объекта, поэтому он является частью Request-URI.

Теперь я также рассматриваю возможность разрешения клиентам создавать объект с помощью POST:

POST /objects/ HTTP/1.1
...

{json representation of the object, including ID}

Поскольку POST подразумевается как операция добавления, я не уверен, что делать, если объект уже существует. Должен ли я рассматривать запрос как запрос на изменение или я должен вернуть код ошибки (который)?

Ответы [ 14 ]

4 голосов
/ 07 сентября 2015

Еще одно потенциальное лечение - это использование PATCH.PATCH определяется как то, что изменяет внутреннее состояние и не ограничивается добавлением.

PATCH решит проблему, позволив вам обновить уже существующие элементы.См .: RFC 5789: PATCH

2 голосов
/ 06 августа 2018

Скорее всего, это 400 Bad Request

6.5.1.400 Неверный запрос

Код состояния 400 (неверный запрос) указывает на то, что сервер не может или не будет обрабатывать запрос из-за чего-то, что воспринимается как ошибка клиента (например, синтаксис искаженного запроса, кадрирование недопустимого запроса или маршрутизация ложного запроса).

Поскольку запрос содержит повторяющееся значение (значение, которое уже существует), его можно воспринимать как ошибку клиента.Необходимо изменить запрос до следующей попытки.Учитывая эти факты, мы можем сделать вывод, что HTTP STATUS 400 Bad Request.

2 голосов
/ 02 января 2017

Наткнулся на этот вопрос, проверяя правильный код для дублирующейся записи.

Прошу прощения за мое невежество, но я не понимаю, почему все игнорируют код "300", который четко говорит "множественный выбор" или "неоднозначный"

На мой взгляд, это был бы идеальный код для создания нестандартной или конкретной системы для вашего собственного использования. Я тоже могу ошибаться!

https://tools.ietf.org/html/rfc7231#section-6.4.1

2 голосов
/ 31 июля 2015

А как насчет 208 - http://httpstatusdogs.com/208-already-reported? Это вариант?

По моему мнению, если единственное, что является повторным ресурсом, то не должно быть ошибок. В конце концов, нет ошибок ни на стороне клиента, ни на стороне сервера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...