2012-07-10 14 views
34

के साथ अपवादों को कैसे संभालें I हाल ही में रुबी के नेट: HTTP क्लास से आराम-क्लाइंट 1.6.7 पर स्विच किया गया।रुबी रेस्ट-क्लाइंट

मुझे अनुरोध बनाने के लिए बहुत आसान लगता है, लेकिन नेट के विपरीत: HTTP अनुरोध, जब बाकी ग्राहक को 200 से अधिक कुछ मिलता है, तो अनुरोध मर जाता है। मैंने RestClient.get के बाद सीधे ब्रेकपॉइंट डालने का प्रयास किया है, और यह कभी भी हिट नहीं होता है - इसलिए मैं कुछ गलत कर रहा हूं।

def get_member_using_card 
    resource = "#{@settings_app_uri}api/v1/card/#{self.member_card_num}?token=#{@settings.api_key}" 
    response = RestClient.get resource 
    if response.code == 200 
    card = JSON.parse(response.body) 
    self.customer_id = card['card']['customer_id'] 
    else 
    return 0 
    end 
end 

कौन इस स्टैकट्रेस में परिणाम:

RestClient::ResourceNotFound - 404 Resource Not Found: 
     /Users/tim/.rvm/gems/ruby-1.9.2-p290/gems/rest-client-1.6.7/lib/restclient/abstr 
act_response.rb:48:in `return!' 
     /Users/tim/.rvm/gems/ruby-1.9.2-p290/gems/rest-client-1.6.7/lib/restclient/reque 
st.rb:230:in `process_result' 
     /Users/tim/.rvm/gems/ruby-1.9.2-p290/gems/rest-client-1.6.7/lib/restclient/reque 
st.rb:178:in `block in transmit' 
     /Users/tim/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/net/http.rb:627:in `start' 
     /Users/tim/.rvm/gems/ruby-1.9.2-p290/gems/rest-client-1.6.7/lib/restclient/reque 
st.rb:172:in `transmit' 
     /Users/tim/.rvm/gems/ruby-1.9.2-p290/gems/rest-client-1.6.7/lib/restclient/reque 
st.rb:64:in `execute' 
     /Users/tim/.rvm/gems/ruby-1.9.2-p290/gems/rest-client-1.6.7/lib/restclient/reque 
st.rb:33:in `execute' 
     /Users/tim/.rvm/gems/ruby-1.9.2-p290/gems/rest-client-1.6.7/lib/restclient.rb:68 
:in `get' 

कोई मुझे बताओ कैसे ठीक से प्रतिक्रिया कोड का मूल्यांकन करें और ऐसा होने से अपवाद रखने के लिए कर सकते हैं ...?

उत्तर

49

200 और 207 एक RestClient :: रिस्पांस परिणाम कोड के लिए

  • लौटा दी जाएगी के बीच परिणाम कोड के लिए http://rubydoc.info/gems/rest-client/

    • पर अपवाद शीर्षक 301, 302 या 307 पुनर्निर्देशन अगर पालन किया जाएगा देखें अनुरोध एक प्राप्त या सिर
    • परिणाम कोड 303 के लिए पुनर्निर्देशन का पालन किया जाएगा और अनुरोध
    • अन्य मामलों के लिए एक RestClient :: अपवाद धारण अपवाद से बढ़ा दी जाएगी, एक विशिष्ट अपवाद वर्ग पता त्रुटि कोड

    RestClient.get 'http://example.com/resource' 
    ➔ RestClient::ResourceNotFound: RestClient::ResourceNotFound` 
    
    begin 
        RestClient.get 'http://example.com/resource' 
    rescue => e 
        e.response 
    end 
    ➔ 404 Resource Not Found | text/html 282 bytes 
    
  • 17

    के लिए फेंक दिया जाएगा इसके अलावा एक ही प्रलेखन @wich की ओर इशारा किया है, आप इस तरह है कि RestClient.get करने के लिए एक ब्लॉक पारित कर सकते हैं यह गैर 200 प्रतिक्रिया कोड पर एक अपवाद फेंक नहीं होगा: http://www.rubydoc.info/gems/rest-client/1.6.7/frames#Result_handling

    3
    rescue RestClient::ExceptionWithResponse => err 
    
    :

    # Don't raise exceptions but return the response 
    RestClient.get('http://example.com/resource'){|response, request, result| response } 
    

    "परिणाम हैंडलिंग" अनुभाग देखें