Согласно спецификации HTTP , текст, который следует после трехзначного кода ответа, «Фраза-причина», может быть заменен только логическим эквивалентом .Таким образом, вы не можете ответить 400 null user
и ожидать, что произойдет что-то полезное.Действительно, От клиента не требуется проверять или отображать фразу-аргумент.
В общем случае объект ответа HTTP (обычно это страница, сопровождающая ответ) должен содержать информациюКлиенту полезно направлять их вперед , даже если ответ является ошибкой.В Интернете большинство таких ошибок являются HTML и лишены машиночитаемой информации, но большинство браузеров действительно отображают ошибку пользователю (и страница ошибок SO довольно хороша!).
Таким образом, для ресурса, который в основном предназначен для чтения с компьютера, у вас есть два варианта:
- В любом случае передать сообщение, читаемое человеком.Верните
400 Bad Request
с ответом в формате HTML, который клиент может показать пользователю.Это очень просто, но это немного , как если бы выбрасывалось непроверенное исключение , оно передает всю тяжелую работу клиенту или конечному пользователю. - Разрешить клиентам восстановление.Верните
400 Bad Request
с машиночитаемым ответом, который является частью вашего API, чтобы клиенты могли восстанавливаться после известных ошибок.Это сложнее, подобно генерации проверенного исключения, становится частью API и позволяет клиентам корректно восстанавливаться, если они этого хотят.
Вы даже можете сделать серверПоддержите оба сценария, определив тип носителя для машиночитаемого восстановления после ошибок документа и разрешив клиентам «принимать» их: Accept: application/atom+xml, application/my.proprietary.errors+json
Клиенты, которые забыли обязательное поле, могут выбратьполучение машиночитаемых ошибок или ошибок, читаемых человеком, выбрав Accept
тип носителя с ошибкой.