Se stavo scrivendo il client REST, mi aspetterei una "Richiesta errata HTTP 400" dal server. E se scrivessi codice java invocando una libreria sul lato client che alla fine mette le chiamate REST su un server, mi aspetterei un'eccezione IllegalArgument
.
Non c'è nulla in questa domanda che sia specificamente pertinente per java, o per le API REST, (*) o per la programmazione lato client o per la programmazione lato server. Il fatto è che si sta programmando contro un'interfaccia. Un'interfaccia è due cose:
- Un'interfaccia è un'emulazione .
Come astrazione, l'interfaccia dovrebbe preferibilmente nascondere tutti i dettagli specifici dell'implementazione dal chiamante. Per quanto riguarda la validazione dei parametri, questa è un'area grigia, perché per ogni parametro è necessario considerare se i suoi limiti sono ciò che sono dovuti alla natura dell'interfaccia o a causa delle peculiarità dell'implementazione. Ad esempio, se il server offre un mazzo di carte, un limite di 50 sarebbe una peculiarità dell'implementazione, poiché i mazzi di carte normalmente hanno 52 carte, o 54 se i jolly sono consentiti. Se il limite era 52, allora potreste dire che questa è un'interfaccia per un mazzo di carte senza jolly e considerare il limite come parte dell'interfaccia.
Quindi, per riassumere, se un limite può essere incluso nella descrizione agnostica dell'implementazione dell'interfaccia, allora validarlo con tutti i mezzi. In caso contrario, ignorarlo e lasciare che l'implementazione lo convalidi. Ma assicurati di leggere prima la prossima sezione.
-
Un'interfaccia è contratto .
Se dovessi lasciare che l'altra parte faccia quello che vuole, senza mai verificare se stanno rispettando la loro parte del contratto, ti stai preparando per essere sfruttato. La tua vita sarà dura.
Di fatto, la decenza comune impone di controllare tutto ciò che è possibile controllare ragionevolmente anche sulle chiamate in uscita, in modo da:
-
assicurati di non violare mai il contratto dal tuo lato e
-
sapere quando hai fatto qualcosa di sbagliato senza dover fare affidamento sull'altro lato facendo il loro lavoro correttamente e convalidando le tue chiamate.
(*) Questa brutta abitudine di dire "API" mentre in realtà significa "API REST" muore per una brutta morte? grazie!