Мы разрабатываем стандартную службу REST, используя коды состояния HTTP в качестве кода ответа, если что-то пошло не так. (например, неверный ввод пользователя вернет клиенту «400 неверных запросов»)
Однако мы чувствовали, что более подробное сообщение об ошибке будет полезно для клиента. (например, ошибка ввода неправильная из-за того, что X является нераспознанным именем параметра)
Мы бы хотели быть максимально точными со спецификациями HTTP, поэтому после изучения спецификации в RFC2616 мы подумываем поместить подробное сообщение об ошибке в заголовки HTTP, особенно в Поле предупреждения заголовка HTTP . В RFC сказано, что:
Поле общего заголовка Warning используется для передачи дополнительной информации о состоянии или преобразовании сообщения, которое может не отражаться в сообщении . Эта информация обычно используется для предупреждения о возможной нехватке семантической прозрачности от операций кэширования или преобразований, применяемых к телу сущности сообщения.
Кажется, что нет никаких ограничений на использование этого заголовка для других предупреждений (таких как сообщение об ошибке REST), даже тех, которые не связаны с предупреждениями кэша в соответствии с первоначальным намерением этого заголовка. Нам нравится семантика, и мы планировали использовать код предупреждения 299, который, кажется, вполне соответствует требованиям:
299 Прочее постоянное предупреждение Текст предупреждения МОЖЕТ содержать произвольную информацию , которая должна быть представлена пользователю, или записана . Система, получающая это предупреждение, НЕ ДОЛЖНА предпринимать какие-либо автоматические действия.
Итак, учитывая недопустимый случай ошибки ввода, представленный в верхней части этого вопроса, мы думаем поместить наше сообщение об ошибке REST, как в следующем примере:
HTTP/1.1 400 Bad Request
Warning: 299 ServiceName "Invalid input error: X is unrecognized parameter name."
Это хорошая идея / практика? Мы также обнаружили, что некоторые сервисы подробно описывают это сообщение в заголовке X-Warning, но это, кажется, не является стандартным. Мы задаемся вопросом, что бы об этом подумала мудрость улья из стека REST stackoverflow. Существуют ли также более эффективные / стандартизированные методы для передачи подробных сообщений об ошибках в ответах REST?