Какой код ошибки HTTP для сбоя при создании нового ресурса из-за отсутствия родительского объекта - PullRequest
11 голосов
/ 17 августа 2011

Скажем, у меня есть API, раскрывающий два связанных ресурса, Компания, в которой много сотрудников.

Скажем, я создаю новую компанию: POST http://domain/api/company/, которая возвращает что-то вроде http://domain/api/company/123.

Если компания / 123 удаляется из системы (скажем, УДАЛИТЬ), то GET http://domain/api/company/123 может вернуть HTTP-код ответа 410 (Ушел).

У меня такой вопрос.Если я сейчас попытаюсь создать Сотрудника в Company / 123, выполнив POST http://domain/api/employees/ (с companyId, установленным в теле запроса равным 123), какой код ответа HTTP должен быть отправлен обратно сервером из-за неверного запроса?

Например, запрос правильно отформатирован, но существует логическая ошибка, связанная с отсутствием компании 123.

Внутренняя ошибка сервера 500?

Ответы [ 2 ]

22 голосов
/ 17 августа 2011

Не 500, потому что с сервером проблем нет.

Я бы предложил 409 Конфликт.

Из RFC:

Запрос можетне будет завершено из-за конфликта с текущим состоянием ресурса.Этот код разрешен только в ситуациях, когда ожидается, что пользователь сможет разрешить конфликт и повторно отправить запрос.Тело ответа ДОЛЖНО содержать достаточно информации, чтобы пользователь мог распознать источник конфликта.В идеале, объект ответа должен включать в себя достаточно информации, чтобы пользователь или пользовательский агент мог решить проблему;однако это может быть невозможно и не требуется.Конфликты чаще всего возникают в ответ на запрос PUT.Например, если использовалось управление версиями, а объект PUT включал изменения в ресурсе, которые конфликтуют с ресурсами, сделанными ранее (сторонним) запросом, сервер может использовать ответ 409, чтобы указать, что он не может выполнить запрос,В этом случае объект ответа, скорее всего, будет содержать список различий между двумя версиями в формате, определенном типом ответа.

Это не совсем соответствует вашему случаю, но оноИМХО очень близко.

Например, сервер может сообщить вам, что родительский ресурс не существует для публикации, и вы можете «повторно отправить» сотрудника в другую компанию.:)

1 голос
/ 11 ноября 2017

Я работал в той же ситуации здесь.

После оценки параметров кода статуса HTTP, мне кажется, лучший вариант - вернуть 424 Failed Dependency

Код состояния 424 (Failed Dependency) означает, что метод не может быть выполнен на ресурсе, поскольку запрошенное действие зависит от другого действия, и это действие не выполнено.Например, если команда в методе PROPPATCH завершается неудачно, как минимум, остальные команды также не будут работать с 424 (Failed Dependency).

From RFC

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