Код состояния HTTP для конечной точки upsert (вставка / обновление) - PullRequest
1 голос
/ 14 марта 2019

У меня есть одна конечная точка PUT, которая создает / заменяет объект, и мне не нужно возвращать заголовок Location или любое тело объекта.

Имеет ли смысл всегда возвращать 204 (без содержимого) или оно должно быть 201, если это новая сущность, и 204, если она заменяет сущность?

1 Ответ

5 голосов
/ 14 марта 2019

Коды состояния предназначены для , чтобы указать результат попытки сервера понять и удовлетворить запрос . Здесь есть два сценария:

  • Если ресурс был создан в результате запроса, имеет смысл вернуть 201. Заголовок Location также может быть возвращен для идентификации вновь созданного ресурса. Если сервер не возвращает заголовок Location, клиент будет считать, что вновь созданный ресурс идентифицирован по действующему URI запроса.

  • Если ресурс был изменен с представлением, отправленным в полезной нагрузке запроса, тогда 204 или 200 являются подходящими кодами состояния. С последним вы можете вернуть представление о новом состоянии ресурса.

Некоторые соответствующие цитаты из RFC 7231 :

4.3.4. PUT

Метод PUT запрашивает, чтобы состояние целевого ресурса было создано или заменено на состояние, определенное представлением, заключенным в полезную нагрузку сообщения запроса. [...]

Если целевой ресурс не имеет текущего представления и PUT успешно создает его, сервер происхождения ДОЛЖЕН проинформировать агента пользователя, отправив ответ 201 (Создано). Если целевой ресурс действительно имеет текущее представление и это представление успешно изменено в соответствии с состоянием вложенного представления, то сервер происхождения ДОЛЖЕН отправить ответ 200 (OK) или 204 (No Content) на указать успешное завершение запроса. [...]

6.3.1. 200 ОК

Код состояния 200 (OK) указывает на успешное выполнение запроса. Полезная нагрузка, отправляемая в ответе 200, зависит от метода запроса. Для методов, определенных в данной спецификации, предполагаемое значение полезной нагрузки может быть суммировано как:

[...]

PUT, DELETE: представление статуса действия;

[...]

6.3.2. 201 Создано

Код состояния 201 (Создан) указывает, что запрос был выполнен и привел к созданию одного или нескольких новых ресурсов. Основной ресурс, созданный запросом, идентифицируется либо полем заголовка Location в ответе, либо, если поле Location не получено, эффективным URI запроса. [...]

6.3.5. 204 Нет содержимого

Код состояния 204 (без содержимого) указывает, что сервер успешно выполнил запрос и что в теле полезной нагрузки ответа нет дополнительного содержимого для отправки. Метаданные в полях заголовка ответа относятся к целевому ресурсу и его выбранному представлению после применения запрошенного действия. [...]

...