Gestisce l'errore del database per il server API

0

Recentemente ho lavorato con un server API restful e ho riscontrato un problema con la gestione dell'errore del database.

L'approccio di base è ogni volta che si verifica un'eccezione SQL, il server restituirà "500" al client e il client non avrà idea di cosa non funzioni all'interno del server. Va bene per gli errori del server. Ma a volte, gli errori vengono creati dall'input dell'utente, soprattutto in caso di violazione di un vincolo univoco e riferimento non valido, ed è necessario restituire un errore più facile da usare.

Cosa devo fare per gestire correttamente questi casi? Come capisco l'analisi del messaggio SQL è un grande no. Il mio attuale approccio è aggiungere 1 ulteriore livello di validazione per verificare questi vincoli. Ciò comporterà l'esecuzione della convalida 2 volte, 1 a livello di applicazione e 1 a livello di database, il che è in teoria piuttosto inefficiente. Quindi ci sono approcci migliori?

    
posta Yoshi 26.10.2016 - 20:20
fonte

1 risposta

2

Per le richieste che potrebbero essere capite ma non elaborate dal server, il codice di errore 422 Unprocessable entity potrebbe essere appropriato.

The 422 (Unprocessable Entity) status code means the server understands the content type of the request entity (hence a 415(Unsupported Media Type) status code is inappropriate), and the syntax of the request entity is correct (thus a 400 (Bad Request) status code is inappropriate) but was unable to process the contained instructions. For example, this error condition may occur if an XML request body contains well-formed (i.e., syntactically correct), but semantically erroneous, XML instructions.

Per casi d'uso più specifici, come la violazione di un vincolo univoco, si potrebbe andare per il codice di errore più specifico, 409 Conflict , in pratica dicendo al calee che il server ha ancora una volta capito la richiesta ma non potrebbe essere completata a causa di conflitti informazioni.

    
risposta data 26.10.2016 - 21:18
fonte

Leggi altre domande sui tag