Abbiamo un'API REST con un endpoint che accetta i dati JSON dal client. Uno dei campi JSON è un URL che verrà reso ad altri utenti come collegamento ipertestuale a una pagina del sito Web associata alla risorsa. Da qualche parte nella pipeline dovevamo assicurarci che l'URL sia valido (inizia con http(s)://
, contiene un dominio da una whitelist, ecc.).
Quindi abbiamo progettato l'API in modo tale che accetti solo URL validi e restituisca un errore (400) quando l'URL è considerato non valido. Sul lato dell'interfaccia utente, l'utente deve correggere l'URL finché non è valido, il messaggio di errore si adatta al caso di errore (valore mancante, dominio non valido, formato non valido ...).
Il nostro proprietario del prodotto ha testato la nostra implementazione prima di andare in diretta e ha avuto problemi con questo approccio semplice. Ha digitato "facebook.com/foobar" e si aspettava che l'URL fosse valido. Il messaggio di errore era qualcosa del tipo "Inserisci un URL valido come link ". Si aspettava (giustamente) che il campo di input avrebbe accettato qualsiasi cosa accettasse una barra degli indirizzi del browser. Il messaggio di errore avrebbe potuto essere più chiaro ("l'URL dovrebbe iniziare con http (s): //"), ma abbiamo concordato che aveva ragione e che in questo caso l'input dell'utente dovrebbe essere corretto dalla nostra applicazione prima di essere salvato.
Qui abbiamo avuto 2 idee:
- Sia che l'API corregga l'URL (antepone un protocollo predefinito) al momento del salvataggio;
- Oppure anteponi il protocollo sul lato client e non toccare la convalida dell'API.
Ho una strong preferenza per il metodo lato client, perché credo che un'API REST non debba mai alterare l'input dell'utente in modo silenzioso (non sai mai quale tipo di client consumerà la tua API, e la modifica silenziosa dell'input dell'utente potrebbe avere effetti collaterali inaspettati- effetti). Il problema è che non sono riuscito a trovare alcun esempio di vita reale per supportare il mio punto di vista.
Al contrario, uno dei miei compagni di squadra (quello responsabile della correzione) non ha trovato alcun motivo valido per preferire un metodo rispetto all'altro e ha optato per la correzione dell'API (principalmente perché è molto più veloce da implementare e non devi implementare questo comportamento per ogni client utilizzando la tua API).
Che ne pensi?