Использование кодов состояния HTTP для отражения успеха/сбоя запроса веб-службы?

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

С одной стороны, похоже, что HTTP-коды состояния для HTTP: несмотря на то, что возвращается ошибка приложения, сама передача HTTP прошла успешно, предлагая ответ 200 OK.

С другой стороны, подход RESTful, по-видимому, предполагает, что если вызывающий объект пытается отправить ресурс, а параметры JSON запроса некорректны, то 400 Bad Request подходит.

Я использую Prototype на стороне клиента, у которого есть хороший механизм для автоматической отправки на разные обратные вызовы на основе кода состояния HTTP (onSuccess и onFailure), поэтому у меня возникает соблазн использовать коды состояния для указания успеха или неудачи службы, но мне было бы интересно услышать, есть ли у кого-то мнения или опыт с обычной практикой в ​​этом вопросе.

Спасибо!

Ответ 1

http status code предназначен только для указания статуса ответа приложения. и, как вы сказали, если параметры json как-то недействительны, код состояния 400 соответствует.

так что да, это действительно хорошая идея использовать код состояния http. de plus, код состояния затем легко понять, поскольку они не меняются от приложения (веб-сервисов) к другому

Ответ 2

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