6

Tôi đang tương tác với CampaignMonitor's API bằng cách sử dụng ruby wrapper (createsend-ruby) và tôi chỉ tự hỏi những gì bạn muốn giới thiệu cho đến khi xử lý lỗi/ngoại lệ. Tôi đã suy nghĩ chỉ sử dụng bắt đầu/cứu/kết thúc như sau, nhưng tôi chỉ muốn biết nếu có bất kỳ kỹ thuật tốt hơn cho loại điều (khi bạn đang đối phó với một API của bên thứ 3).Làm cách nào để xử lý lỗi/ngoại lệ khi gọi API bên ngoài trong 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 

Ví dụ: bạn có cố gắng nắm bắt các ngoại lệ cụ thể và xử lý riêng các ngoại lệ đó không?

rescue CreateSend::BadRequest => e 

Hoặc đây chỉ là vấn đề yêu cầu cá nhân và/hoặc yêu cầu ứng dụng?

Cảm ơn bạn đã dành thời gian!

Trả lời

7

Tôi thường bắt đầu với một ngoại lệ duy nhất để bắt tất cả và đi từ đó. Nếu có một lỗi cụ thể xuất hiện thường xuyên hoặc cần phải được xử lý khác với một lỗi khác, chỉ cần thêm một khối cứu hộ khác ở phía dưới cùng của bạn để ngoại lệ bị bắt ở đó. Bạn đang làm đúng :)

Tránh rescue Exception khi có thể, một đơn giản rescue nên thực hiện thủ thuật.

Chỉ cần làm rõ, bạn có thể có bất kỳ số lượng cứu cũng như đảm bảo:

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

Ông có thể vui lòng giải thích lý do tại sao * * 'cứu Exception' nên tránh khi có thể (và chỉ một mình 'rescue' nên được sử dụng)? Ngoài ra, khi nào thì không thể tránh việc chỉ định 'Ngoại lệ'? – user664833

+4

'giải cứu' trên giải cứu riêng của nó từ 'StandardError' và con của nó là tất cả những gì bạn cần 99% thời gian, trong khi' rescue Exception' tăng cao hơn chuỗi và cứu thoát khỏi các tín hiệu, thoát hệ thống, không có lỗi bộ nhớ và tập lệnh lỗi. Trừ khi bạn đang sử dụng 'cứu Ngoại lệ 'vì một lý do cụ thể, bạn không nên sử dụng nó. – bensie

Các vấn đề liên quan