Supponiamo di avere un endpoint REST che accetta un intero come parametro:
/makeWaffles?numberOfWaffles=3
In questo caso, voglio che il numero sia positivo perché non riesco a creare un numero negativo di waffle (e la richiesta di 0 waffle è una perdita di tempo). Quindi voglio rifiutare qualsiasi richiesta che non contenga un numero intero positivo. Voglio anche respingere una richiesta che supera un numero intero massimo (diciamo per ora che è MAX_INTEGER).
Nel caso in cui qualcuno richieda un numero non positivo di waffle, dovrei restituire uno stato HTTP 400 (Richiesta non valida)? Il mio pensiero iniziale è sì: non è un numero valido per me completare la richiesta. Tuttavia, RFC non menziona le regole aziendali come motivo per lanciarlo:
The 400 (Bad Request) status code indicates that the server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).
Una regola aziendale non rientra in nessuno di questi tre esempi. È sintatticamente corretto, è correttamente incorniciato e non è un instradamento di richieste ingannevole.
Quindi dovrei restituire uno stato HTTP 400 (Richiesta non valida) se un parametro è sintatticamente corretto, ma viola una regola aziendale? O c'è uno stato più appropriato da restituire?