2016-05-30 2 views
1

Используя следующий API:Сообщение состояние проверка состояния HTTP

feed?url=XXX 

Validations выполняется по параметру url:

  1. Если отсутствует: 400 Bad Request
  2. Если пустой/недопустимый URL: 422 Unprocessable Entity
  3. Если URL не указывает на действительный RSS/Atom feed: 422 ??

Какая ошибка состояния должна быть возвращена для 3.?

В отличие от проверки 2., не представляется возможным проверить 3. без выборки данных и пытается разобрать его, поэтому сырые пользовательские данные не могут быть непосредственно валидацию.

Я думал о 422 Unprocessable Entity, потому что это связано с проверкой, даже если не непосредственно данные (url), но ссылка на эти данные (содержание url).

Что вы думаете?

ответ

0

422 не подходит для № 2 и № 3. Он относится к серверу, понимающему заголовок Content-Type, но фактический контент в теле запроса HTTP не может быть интерпретирован.

Я думаю, вы могли бы утверждать, что здесь подходит 502 Bad Gateway. Это немного странно, потому что проблема как ошибка пользователя, так и код 4xx, но также это происходит на сервере,).

Но если в этом контексте вы строго рассматриваете эту проблему, вызванную клиентом (неправильный ввод в URL-адресе), а не на стороне сервера, то я бы сказал, что для этого недостаточно определенного кода ошибки, и вы должны вероятно, просто придерживаться 400 для всех из них.

А может быть ... возможно, вы можете сделать аргумент, что 409 может работать здесь. A 409 может использоваться в случае, когда:

  1. В HTTP-запросе нет ничего особенного.
  2. Но состояние другого ресурса вызывает сбой запроса.

Как правило, этот «другой ресурс» живет в одной и той же системе, но я не понимаю, почему внешний канал Atom также не может считаться конфликтующим.

Потому что, если фид Atom на внешнем сервере «исправлен», тогда будет выполнен исходный HTTP-запрос, который пользователь создал. Таким образом, здесь подходит 409.

+0

О '422' Я согласен, что параметр запроса не является частью * entity *, поэтому его трудно вернуть * Непроцессная сущность *. Но я действительно не думаю, что «409 Конфликт» - лучшая альтернатива (из того, что я читал здесь, https://tools.ietf.org/html/rfc7231#page-60). – Kakawait

+0

Мой опыт работы с 409 и его использование основывается на его использовании в WebDAV (расширение HTTP). Там, где он применяется, это означает почти повсеместно «запрос не является неправильным, и он может быть успешным, если отправить его после изменения состояния другого ресурса». Это также определенно, как я буду интерпретировать 409 из HTTP-расширения, даже если он немного более общий и загадочный. – Evert