Подтвердить что ты не робот

Правильные коды состояния для ответов JSON на вызовы Ajax?

Мой проект возвращает JSON для вызовов Ajax из браузера. Мне интересно, какой код состояния для отправки обратно с ответами на недопустимые (но успешно обработанные) данные.

Например, jQuery имеет два следующих обратных вызова при выполнении запросов Ajax:

success: вызывается, когда код состояния 200/2xx поставляется вместе с ответом.

error: вызывается, когда коды 4xx, 5xx и т.д. возвращаются с кодом ответа.

Если пользователь пытается создать новый объект "Person", после успеха я отправляю JSON-представление вновь созданного объекта, предоставляя javascript доступ к обязательному уникальному идентификатору для нового объекта и т.д. Это, конечно же, отправляется с кодом состояния 200.

Если пользователь отправляет неверные или неверные данные (например, недопустимое/неполное имя), я хотел бы отправить обратно сообщения об ошибках проверки через JSON. (Я не понимаю, почему это было бы плохо).

Мой вопрос: при этом следует отправить код статуса 200, потому что я успешно обработал их недопустимые данные? Поэтому я бы использовал обратный вызов jQuery success, но просто проверял наличие ошибок...

Или, следует ли использовать код статуса 4xx, возможно, "Плохой запрос", потому что данные, которые они мне отправили, недействительны? (и, таким образом, используйте обратный вызов error, чтобы делать необходимые уведомления на стороне клиента).

4b9b3361

Ответ 1

Я согласен с ответом 400 Bad Request.

Для вдохновения вы можете взглянуть на то, как Twitter (широко используемый сервис JSON) делает это: https://dev.twitter.com/overview/api/response-codes

Code Text Описание

  • 200 OK - Успех!
  • 304 Not Modified - новых данных не было.
  • 400 Bad Request - Запрос был недействительным или не может служить другим способом. Далее будет описано сопроводительное сообщение об ошибке. Запросы без аутентификации считаются недействительными и будут давать этот ответ.
  • 401 Unauthorized - Отсутствуют или неверные учетные данные. Также возвращается в других обстоятельствах (например, все вызовы конечных точек API v1 возвращаются 401).
  • 403 Forbidden - запрос понимается, но ему было отказано или доступ запрещен. Сопровождающее сообщение об ошибке объяснит, почему. Этот код используется, когда запросы отклоняются из-за ограничений на обновление. Другие причины возврата этого статуса перечислены вместе с кодами ответов в приведенной ниже таблице.
  • 404 Not Found - Запрошенный URI недействителен или запрашиваемый ресурс, например пользователь, не существует. Также возвращается, когда запрошенный формат не поддерживается запрошенным методом.
  • 406 Not Acceptable - Возвращается, если в запросе указан недопустимый формат.
  • 410 Gone - Этот ресурс пропал. Используется для указания того, что конечная точка API отключена.
  • 420 Enhance Your Calm Возврат, когда приложение ограничено по скорости.
  • 422 Unprocessable Entity - Возвращается, когда изображение, загруженное в аккаунт POST/update_profile_banner, не может быть обработано.
  • 429 Too Many Requests - Возвращается, когда запрос не может быть подан из-за того, что предел скорости передачи приложений был исчерпан для ресурса. См. Ограничение ставок.
  • 500 Internal Server Error= Что-то сломано. Отправьте на форумы разработчиков дополнительную информацию о своем запросе, если у других возникнут похожие проблемы.
  • 502 Bad Gateway - Twitter отключен или обновлен.
  • 503 Service Unavailable - Серверы Twitter вверх, но перегружены запросами. Попробуйте позже.
  • 504 Gateway Timeout - Серверы Twitter работают, но запрос не может быть обслужит из-за некоторого сбоя в нашем стеке. Повторите попытку позже.

Ответ 2

Я бы отправил заголовок "400 Bad Request" обратно в ответ с информацией в json о том, что пошло не так. Затем поймайте событие обработчиком jquerys $.ajaxError() и проанализируйте сообщение об ошибке, которое я получил в ответ, чтобы доставить хорошую обратную связь конечному пользователю.

Подробнее о обработчике событий ajaxError вы можете прочитать здесь!