У меня есть служба REST, доступная для клиентов iPhone и Android. В настоящее время я использую HTTP-коды 200, 400, 401, 403, 404, 409, 500 и т. Д.
Мой вопрос: где рекомендуется указать причину / описание / причину ошибки? Имеет ли смысл для REST API всегда иметь настраиваемую причину в заголовке, как это?
< HTTP/1.1 400 Bad Request - Missing Required Parameters.
< Date: Thu, 20 Dec 2012 01:09:06 GMT
< Server: Apache/2.2.22 (Ubuntu)
< Connection: close
< Transfer-Encoding: chunked
Или лучше иметь его в теле ответа через JSON?
< HTTP/1.1 400 Bad Request
< Date: Thu, 20 Dec 2012 01:09:06 GMT
< Server: Apache/2.2.22 (Ubuntu)
< Connection: close
< Transfer-Encoding: chunked
< Content-Type: application/json
{ "error" : "Missing Required Parameters" }
http
rest
http-error
Джеймс Коуэн
источник
источник
Ответы:
Цитата из спецификации HTTP для кодов ошибок 400.x:
Лучше всего включать сообщение об ошибке как объект в тело ответа HTTP - будь то JSON, простой текст, форматированный HTML или любой другой формат, который вы можете использовать.
источник
Подробности об ошибках лучше иметь в теле. Более того, многие (большинство / почти все, например, WSGI) серверы и клиенты не поддерживают изменение имени кода ошибки - рассматривают их как фиксированные пары (например, 400 всегда означает «Плохой запрос», а не «Плохой запрос - вы Забыл указать идентификатор пользователя »). Даже если они не сломаются, они не будут заботиться о вашем особом имени для конкретного кода ошибки.
источник
Ошибка не принадлежит телу. Это относится к заголовку предупреждения.
Справка
источник
Warning
как следует из названия, это не для ошибок. RFC (7234) гласит:> Использование предупреждения, а не кода состояния ошибки, отличает эти ответы от истинных сбоев.