На какой код HTTP-ошибки должен реагировать веб-сервис, когда потребитель отправляет неверный запрос?

Допустим, у вас есть служба REST в Python/Flask, которая принимает следующее тело запроса:

{'date': '2015-01-01'}

Ваш потребитель отправляет следующий неверный запрос:

{'date': '01/01/2015'}.

Вашему API не удается разобрать его, и вы зафиксировали ошибку и знаете, что пользователь отправил дату в неправильном формате. Какой код ошибки HTTP вы отвечаете?

Я использовал HTTP Code 400:

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

Я сказал своему потребителю, что если он видит 400, он не должен пытаться повторно отправить запрос, потому что он должен измениться в первую очередь.

Тем не менее, мой потребитель сообщал, что иногда мой веб-сервер возвращает ошибку 400 со следующим HTML:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>400 Bad Request</title>
<h1>Bad Request</h1>
<p>The browser (or proxy) sent a request that this server could not understand.</p>

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

1 ответ

Решение

Вы можете использовать любой код состояния 400 или же 422 и предоставить некоторые дополнительные подсказки в ответной нагрузке. Например:

{
  "errors": [
    {
      "field": "date",
      "message": "The format of the date must 'MM/dd/yyyy'"
    }
  ]
}

Таким образом, конечный пользователь узнает, что не так в его запросе, и обновит его.

Надеюсь, это поможет тебе, Тьерри

Другие вопросы по тегам