6

Sto interagendo con CampaignMonitor's API utilizzando ruby wrapper (createsend-ruby) e mi chiedo solo cosa consiglieresti per quanto riguarda la gestione degli errori/delle eccezioni. Stavo pensando di usare start/rescue/end come segue, ma voglio solo sapere se ci sono tecniche migliori per questo genere di cose (quando hai a che fare con un'API di terze parti).Come gestire errori/eccezioni quando si chiama un'API esterna in Ruby on Rails?

begin 
    list_id = CreateSend::List.create client_id, title, unsubscribe_page, confirmed_opt_in, confirmation_success_page 
rescue Exception => e 
    logger.error "[error] CampaignMonitor error: #{e}" 
    return false 
end 

Ad esempio, si tenta di rilevare eccezioni specifiche e gestirle singolarmente?

rescue CreateSend::BadRequest => e 

Oppure si tratta solo di preferenze individuali e/o requisiti di app?

Grazie per il vostro tempo!

risposta

7

In genere inizio con una sola eccezione per catturarli tutti e passare da lì. Se c'è un particolare errore che si presenta spesso o che deve essere gestito diversamente da un altro, basta aggiungere un altro blocco di salvataggio sopra quello inferiore in modo che l'eccezione venga catturata lì. Lo stai facendo bene :)

Evitare rescue Exception quando possibile, un semplice rescue dovrebbe fare il trucco.

Giusto per chiarire, si può avere qualsiasi numero di salvataggi così come un modo:

begin 
    do_something 
rescue CS::BadRequest => e 
    logger.error "..." 
rescue CS::TimeoutError => e 
    do_something_that_retries 
rescue => e 
    logger.error "..." 
ensure 
    send_email_to_admin 
end 
+0

Potrebbe spiegare gentilmente * perché * 'soccorso Exception' dovrebbe essere evitato quando possibile (e proprio' rescue' da solo dovrebbe essere usato)? Inoltre, quando non sarebbe possibile evitare di specificare "Eccezione"? – user664833

+4

'rescue' sui propri salvataggi da 'StandardError' e dai suoi figli che è tutto ciò che serve il 99% delle volte, mentre' rescue Exception' aumenta la catena e salva da segnali, uscite di sistema, errori di memoria e script errori. A meno che non si utilizzi 'rescue Exception' per un motivo particolare, non si dovrebbe usarlo. – bensie