È un tentativo di creare una risorsa duplicata, ad es. un utente, degno di lanciare un'eccezione?

3

Supponiamo di avere un'API REST per la creazione di utenti in un'applicazione. La richiesta viene inviata a un controller che esegue il marshalling dei dati della richiesta in un oggetto dominio e lo passa a un servizio per creare un utente.

Ora, ci sono alcuni vincoli di unicità su un utente. Se il servizio utente riceve una richiesta per creare un utente duplicato, è opportuno lanciare un'eccezione a questo punto, ad es. DuplicateUserException , o c'è un modo migliore di gestire qualcosa che è un caso di errore prevedibile, cioè non una circostanza eccezionale)?

L'obiettivo qui sarebbe quello di fornire quanti più dettagli possibile al client API, per consentire loro di correggere il loro errore.

    
posta evanjdooner 01.03.2016 - 12:58
fonte

2 risposte

4

Ci sono due posizioni estreme che possono essere prese qui:

  1. Le eccezioni devono essere davvero eccezionali. Non c'è nulla nemmeno lontanamente eccezionale nel provare ad aggiungere un utente esistente. Pertanto, l'errore dovrebbe essere indicato tramite un valore di ritorno.
  2. Se non è possibile eseguire un metodo attraverso il percorso funzionale ottimale (in questo caso, aggiungere un nuovo utente non ancora esistente), generare un'eccezione. Le eccezioni non sono eccezionali, rappresentano semplicemente dove non è possibile seguire il percorso non ottimale. I codici di errore non dovrebbero mai essere restituiti; questo dovrebbe sempre essere gestito da eccezioni.

Come per molte altre cose, la soluzione pragmatica è da qualche parte tra questi due estremi. Dato che stai fornendo un'API REST, anche se viene lanciata un'eccezione, è comunque necessario che venga catturata, eventualmente decodificata e raggruppata come risultato di ritorno per il client, altrimenti potrebbero non ricevere alcuna risposta. In questo caso, potrebbe essere più semplice restituire un messaggio di errore più semplice attraverso i vari livelli. Ci possono essere dei buoni motivi per cui il percorso delle eccezioni funzionerà meglio (se ci sono molti livelli, lanciare un'eccezione semplifica le cose a volte). Quindi valuta i pro e i contro e scegli la soluzione più adatta al tuo caso specifico.

    
risposta data 01.03.2016 - 13:30
fonte
5

I casi eccezionali non devono essere eccezionalmente rari. Scoprire che il nome utente desiderato è già stato preso è un caso eccezionale nel flusso di lavoro di "chiedi di creare un nuovo utente, il nuovo utente è creato". Lanciare un'eccezione qui è assolutamente soddisfacente e normale.

    
risposta data 01.03.2016 - 13:04
fonte

Leggi altre domande sui tag