Digamos que tengo un punto final REST que toma un entero como parámetro:
/makeWaffles?numberOfWaffles=3
En este caso, quiero que el número sea positivo porque no puedo hacer un número negativo de gofres (y solicitar 0 gofres es una pérdida de tiempo). Por lo tanto, quiero rechazar cualquier solicitud que no contenga un entero positivo. También quiero rechazar una solicitud que exceda un número entero máximo (digamos por ahora que es MAX_INTEGER).
En el caso de que alguien solicite un número no positivo de gofres, ¿debo devolver un estado HTTP 400 (Solicitud incorrecta)? Mi pensamiento inicial es sí: no es un número válido para completar la solicitud. Sin embargo, el RFC no menciona las reglas comerciales como una razón para lanzarlo:
El código de estado 400 (Solicitud incorrecta) indica que el servidor no puede o no procesará la solicitud debido a algo que se percibe como un error del cliente (por ejemplo, sintaxis de solicitud con formato incorrecto, enmarcado de mensaje de solicitud no válido o enrutamiento de solicitud engañoso).
Una regla de negocios no se incluye en ninguno de esos tres ejemplos. Es sintácticamente correcto, está enmarcado correctamente y no es una ruta de solicitud engañosa.
Entonces, ¿debo devolver un estado HTTP 400 (Solicitud incorrecta) si un parámetro es sintácticamente correcto, pero viola una regla comercial? ¿O hay un estado más apropiado para regresar?