Digamos que eu tenho um ponto de extremidade REST que usa um número inteiro como parâmetro:
/makeWaffles?numberOfWaffles=3
Nesse caso, quero que o número seja positivo, porque não posso fazer um número negativo de waffles (e solicitar 0 waffles é uma perda de tempo). Então, eu quero rejeitar qualquer solicitação que não contenha um número inteiro positivo. Também quero rejeitar uma solicitação que exceda um número inteiro máximo (digamos que agora seja MAX_INTEGER).
No caso de alguém solicitar um número não positivo de waffles, devo retornar um status HTTP 400 (Solicitação incorreta)? Meu pensamento inicial é sim: não é um número válido para mim concluir a solicitação. No entanto, o RFC não menciona regras de negócios como um motivo para lançá-lo:
O código de status 400 (Solicitação incorreta) indica que o servidor não pode ou não processará a solicitação devido a algo que é percebido como um erro do cliente (por exemplo, sintaxe de solicitação malformada, enquadramento de mensagem de solicitação inválida ou roteamento de solicitação enganoso).
Uma regra de negócios não se enquadra em nenhum desses três exemplos. É sintaticamente correto, está emoldurado corretamente e não é um roteamento de solicitação enganoso.
Portanto, devo retornar um status HTTP 400 (Solicitação incorreta) se um parâmetro estiver sintaticamente correto, mas violar uma regra de negócios? Ou existe um status mais apropriado para retornar?