2012-02-20 7 views
3

Я подозреваю, что это очень простой вопрос. Я пишу PHP-скрипт для ответа на запрос AJAX. Запрос должен содержать некоторые XML-данные, которые обрабатывает сценарий PHP, а затем возвращает ответ. Есть два случая ошибок, которые я хочу рассмотреть:Выбор правильного кода ответа HTTP для неверных данных POST

  1. В запросе нет данных POST; или
  2. некорректные данные в XML (либо не действует, или хорошо сформированным XML, или терпит неудачу некоторые проверки схемы)

В таких случаях я считаю, что я должен быть возврате кода 4xx ответа. Есть ли что-нибудь более подходящее, чем 400?

Подробнее

Чтобы проиллюстрировать эту проблему дальше: Клиентское приложение Javascript является редактором диаграмм для образовательных целей. Пользователь должен создать диаграмму, которая правильно моделирует заданную ситуацию. Затем студент может представить диаграмму, в которой сериализация диаграммы XML отправляется через вызов AJAX на сервер. Сценарий PHP анализирует диаграмму XML и создает XML-отчет, который отправляется как ответ AJAX клиенту. Две ситуации, которые я изначально описал (без данных XML POST или недействительного XML в них), не должны возникать по запросу клиента, но я считаю разумным правильно фиксировать и обрабатывать эти ситуации. Поэтому я считаю, что код ответа 4xx подходит. Структура отчета XML не удовлетворяет этим ситуациям, и пустой отчет будет составлять идеальную диаграмму, которая явно не подходит,

ответ

4

На основании значений кодов в TCP/IP Guide кажется, что 400 - это ваш лучший выбор. Ничего похожего не встретит ваш пример.

+0

Да, я тоже поеду с 400. Большинство кодов состояния HTTP имеют проблемы, связанные с самим HTTP, а не с содержимым запроса, кроме случаев, когда контент конфликтует с ожиданиями, определенными заголовками HTTP. – SpliFF

+0

Достаточно честно, думаю, я останусь с 400 тогда. Большое спасибо. – beldaz

1

Я думаю, что два случая ошибок, о которых вы упоминали, будут обслуживаться с различными кодами статуса HTTP. Из W3C's Status Code Definitions:

400 Bad Request - запрос не может быть понят сервером из-за некорректного синтаксиса. Клиент НЕ ДОЛЖЕН повторять запрос без изменений.

409 Конфликт - запрос не может быть выполнен из-за конфликта с текущим состоянием ресурса .... Например, если управление версиями были использованы и сущность того PUT включены изменения ресурса которые противоречат тем, которые были сделаны ранее (сторонним) запросом, сервер может использовать ответ 409, чтобы указать, что он не может выполнить запрос ....

Таким образом, 400 предназначен для случаев, когда запрос тело не может быть проанализировано из-за проблем с синтаксисом. 409, напротив, похоже на случаи, когда тело запроса разобрано, и сервер хорошо понимает этот запрос, но отказывается выполнять его из-за бизнес-правил.

В случае неудачной проверки схемы или плохого синтаксиса XML я согласен с другими плакатами, 400 подходит. Но в случае отсутствия данных POST, которые вы говорите, является допустимой диаграммой, но неприемлемо по другим причинам, мне кажется более подходящим 409.