Come gestire l'eccezione nell'API REST

2

Data un'API REST, che genera un'eccezione quando gestisce una richiesta da un client. Ogni volta che l'API REST genera un'eccezione, viene registrata e l'applicazione (in questo caso un'applicazione della console) viene chiusa per impedire ulteriori danni.

Devo inviare una risposta al client la cui richiesta ha provocato un'eccezione, indicando che si è verificato un errore o devo lasciare che il client si blocchi e gestirlo (timeout)?

    
posta ebb 28.04.2014 - 11:42
fonte

1 risposta

9

Non ho mai visto alcuna API che lascia il client in sospeso in caso di errore. A meno che tu non abbia un caso molto specifico in cui ciò ha senso ¹ Questo semplicemente non ha senso, e tale comportamento comporterebbe solo un'API praticamente inutilizzabile:

  • Questo rallenterebbe lo sviluppo delle applicazioni client. A meno che non legga molto, molto attentamente la documentazione (e la documentazione è eccellente), farò degli errori che potrebbero causare timeout e quindi rallentare lo sviluppo.

  • Ciò renderebbe anche le app client lente se causano eccezioni quando vengono utilizzate da un utente finale.

Quindi no, non farlo .

Quello che dovresti fare è gestire l'errore con grazia. Questo significa inviare una risposta contenente:

  1. Un codice HTTP specifico, come 404, 403, 500, ecc.

  2. Il dettaglio che spiega cosa è successo. Di solito, questa non dovrebbe essere l'eccezione in sé, dal momento che potrebbe contenere informazioni riservate e potresti voler fornire qualcosa di più comprensibile ai tuoi utenti.

  3. Alla fine il codice interno. Questo può aiutare quando si fornisce supporto. "Ho provato ad accedere all'elenco dei prodotti e ho ottenuto l'errore 7016." è più breve da dire al supporto di "Ho provato ad accedere all'elenco dei prodotti e ho ottenuto l'errore" La categoria manca nella richiesta. Quando si esegue una query per l'elenco di prodotti, è necessario fornire la categoria. "".

  4. Alla fine il link alla pagina web del tuo sito web che contiene documentazione aggiuntiva, esempi e soluzioni alternative.

Esempio:

HTTP 404
{
    "error": "The category is missing in the request. When querying for the list of products
, the category should be provided.",
    "code": 7016,
    "help": "http://api.example.com/docs/errors/7016"
}

La pagina link spiega ulteriormente come evitare questo errore, ovvero quale parametro GET o POST dovrebbe essere utilizzato in la richiesta di specificare l'identificatore della categoria.

¹ Posso immaginare due casi: un'API super sicura che deve impedire agli utenti di tentare di romperla e un'API che vuole impedire DDOS. Nel primo caso, sembra un modo debole per proteggere qualsiasi cosa. Nel secondo caso, appendere senza rispondere non impedirà al client di inviare altre richieste nel frattempo.

    
risposta data 28.04.2014 - 12:02
fonte

Leggi altre domande sui tag