На какой код 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'"
}
]
}
Таким образом, конечный пользователь узнает, что не так в его запросе, и обновит его.
Надеюсь, это поможет тебе, Тьерри