link-it / govway

API Gateway per la Pubblica Amministrazione italiana
https://govway.org
GNU General Public License v3.0
53 stars 10 forks source link

Adeguamento degli errore del Gateway al modello di interoperabilità (RFC 7807) #6

Closed andreapoli closed 5 years ago

andreapoli commented 5 years ago

Gli errori generati autonomamente dal Gateway e non previsti nelle interfacce del servizio target (es: autorizzazione, validazione, etc.) non sono attualmente aderenti alle linee guida indicate nell'api-starter-kit per la modalità REST, per quanto riguarda il formato del messaggio ritornato al client. GovWay è invece già aderente per quanto concerne i codici e gli header http utilizzati (es. X-RateLimit- *).

Si prevede l'adeguamento all'utilizzo del formato json-problem per soddisfare il modello di interoperabilità. Tra la casistica degli errori codificati nell'api-starter-kit utilizzabili per mappare gli errori generati da GovWay non sono stati riscontrati errori espliciti per gestire le casistiche 401 e 403 i quali ricadono nella categoria di 'default'.

andreapoli commented 5 years ago

@ioggstream riguardo alle casistiche 401 e 403 non sarebbe utile definire delle risposte ad hoc simili a quanto avete fatto per '400BadRequest' e '404NotFound' ? In tal modo, se utilizzati nelle specifiche OpenAPI, rientrerebbero tra gli errrori attesi in modo esplicito dai client.

ioggstream commented 5 years ago

@andreapoli Provo ad illustrare il ragionamento fatto. Suggerimenti ben accetti.

Fai sapere se ti torna: il punto è bilanciare leggibilità e chiarezza.

Vedi anche qui

Premessa

Discussione

Ci sono diversi tipi di errore:

Come decidiamo se indicare un errore nell'API? Bilanciando utilità e funzionalità.

1- tutti gli STATUS di successo vanno indicati 2- tutti gli STATUS associati ad errori utili al client a correggere il tiro vanno indicati 3- gli errori ritornati al di fuori all'ambito applicativo vanno indicati SE fanno parte di un contratto specifico (ad esempio 429 e 503 nel ModI2018 hanno una semantica specifica con header co.) 4- gli STATUS semanticamente chiari (eg. 404) vanno indicati SE fanno effettivamente parte dell'interfaccia - tipo "la fattura in questione non esiste" 5- gli STATUS semanticamente chiari (eg. 401, 403, ...) possono non essere indicati se il modello di risposta non fa' parte dell'interfaccia dell'API

andreapoli commented 5 years ago

@ioggstream il ragionamento mi sembra chiaro.