Скажем, у меня есть конечная точка REST, которая принимает целое число в качестве параметра:
/makeWaffles?numberOfWaffles=3
В этом случае я хочу, чтобы число было положительным, потому что я не могу сделать отрицательное число вафель (а запрос 0 вафель - пустая трата времени). Поэтому я хочу отклонить любой запрос, который не содержит положительного целого числа. Я также хочу отклонить запрос, который превышает некоторое максимальное целое число (скажем, пока это MAX_INTEGER).
Если кто-то запрашивает не положительное число вафель, должен ли я вернуть статус HTTP 400 (Bad Request)? Сначала я подумал: да, это неправильный номер для выполнения запроса. Тем не менее, RFC не упоминает бизнес-правила в качестве причины, чтобы бросить его:
Код состояния 400 (неверный запрос) указывает на то, что сервер не может или не будет обрабатывать запрос из-за чего-то, что воспринимается как ошибка клиента (например, синтаксис искаженного запроса, кадрирование неверного сообщения запроса или обманчивая маршрутизация запроса).
Бизнес-правило не подпадает ни под один из этих трех примеров. Это синтаксически правильно, правильно оформлено, и это не обманчивая маршрутизация запросов.
Так должен ли я возвращать статус HTTP 400 (неверный запрос), если параметр синтаксически правильный, но нарушает бизнес-правило? Или есть более подходящий статус для возвращения?