В настоящее время я разрабатываю REST API, и одна из его основных функций заключается в том, что он использует различные коды состояния HTTP для возврата информации о состоянии / ошибке, некоторые из которых могут быть расширенной информацией (например, если элемент не найден, некоторые другие подобные элементы), которые будут в теле ответа.
Это нормально, пока вы не доберетесь до «поврежденных» клиентов, таких как Flash и JavaScript, которые не могут получить доступ к телу ответа или заголовкам, если код состояния HTTP не соответствует 200 OK (даже созданный код успеха 201 может заставить Flash перестать думать, что это ошибка).
Итак, мой вопрос: существует ли стандартный способ, позволяющий клиенту этого типа запрашивать, чтобы все коды состояния были HTTP 200, и указывать код состояния real другим способом?
Одним из решений, о котором я думал, является использование шаблона заголовка HTTP Accept-*
с использованием заголовка расширения X-Accept-Status
, чтобы указать, какие коды состояния могут обрабатываться, например, Флэш отправит ...
X-Accept-Status: 200
... и тогда любой код состояния, отсутствующий в этом списке, будет сопоставлен с тем, который есть, и ошибка будет возвращена в теле ответа, возможно, с другим дополнительным заголовком, указывающим реальный код состояния, например,
X-HTTP-Status-Code: 404 Not Found
Все это выглядит немного ужасно и работает против протокола, но если у вас есть клиенты, которые не могут использовать свойство протокола, это неизбежно. Я просто ищу что-то вроде X-HTTP-Method-Override
(это «стандартный» способ работы с протоколом для клиентов, которые не могут отправлять запросы PUT
/ DELETE
), но для клиентов, которые не могут понять коды состояния.