Проверка состояния сообщения http статус
Используя следующий API:
feed?url=XXX
Проверки, выполненные по параметру url
:
- Если отсутствует:
400 Bad Request
- Если пустой / недействительный URL:
422 Unprocessable Entity
- Если URL не указывает на действительный канал RSS/Atom:
422
??
Какую ошибку статуса следует вернуть для 3.?
В отличие от проверки 2. невозможно проверить 3. без извлечения данных и попытки их анализа, поэтому необработанные пользовательские данные не могут быть проверены напрямую.
Я думал о 422 Unprocessable Entity
потому что это связано с проверкой, даже если это не напрямую данные (url
) но ссылка на эти данные (содержание url
).
Каково твое мнение?
1 ответ
422 не подходит для № 2 и № 3. Это относится к пониманию сервера Content-Type
заголовок, но фактическое содержимое в теле HTTP-запроса не может быть интерпретировано.
Я думаю, что вы могли бы сделать аргумент, что 502 Bad Gateway
уместно здесь. Это немного странно, потому что проблема заключается не только в пользовательской ошибке (входящий параметр url, то есть код 4xx), но и в том, что это происходит на сервере и, в частности, на сервере происхождения (что имеет смысл как 5xx и, в частности, 502).
Но если в этом контексте вы строго рассматриваете эту проблему, которую вызвал клиент (неверный ввод в URL), а не на стороне сервера, то я бы сказал, что для этого нет достаточно конкретного кода ошибки, и вам, вероятно, следует просто придерживаться 400 для всех из них.
А может быть... возможно, вы можете привести аргумент, что 409 может работать здесь. 409 может использоваться в случае, когда:
- Нет ничего особенно плохого в HTTP-запросе.
- Но состояние другого ресурса вызывает сбой запроса.
Обычно этот "другой ресурс" находится в той же системе, но я не понимаю, почему внешний фид Atom также не может рассматриваться как конфликтующий.
Потому что, если фид Atom на внешнем сервере "фиксирован", то исходный HTTP-запрос, сделанный пользователем, теперь будет работать. Так что 409
вид здесь уместен.