rails ruby rest-client

rails - faraday post ruby



Cómo manejar excepciones con Ruby Rest-Client (4)

Hay varios errores que pueden suceder, tipos de excepción específicos como Errno :: EHOSTUNREACH o el ExceptionWithResponse más genérico. Verifique el archivo léame para más información.

Recientemente cambié de Ruby''s Net: clase HTTP a rest-client 1.6.7.

Me resulta mucho más fácil formular solicitudes, pero a diferencia de Net: solicitud de HTTP, cuando rest-client obtiene algo distinto de 200, la solicitud fallece. Intenté poner un punto de interrupción directamente después del RestClient.get, y nunca se golpea, así que estoy haciendo algo mal.

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

Lo que resulta en esta stacktrace:

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''

¿Puede alguien decirme cómo evaluar correctamente el código de respuesta y evitar que esta excepción ocurra ...?


También en la misma documentación a la que señaló @wich, puede pasar un bloque a RestClient.get de modo que no genere una excepción en códigos de respuesta que no sean 200:

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

Consulte la sección "Gestión de resultados": http://www.rubydoc.info/gems/rest-client/1.6.7/frames#Result_handling


Ver encabezado Excepciones en http://rubydoc.info/gems/rest-client/

  • para el código de resultados entre 200 y 207, se devolverá un RestClient :: Response
  • para los resultados del código 301, 302 o 307 se seguirá la redirección si la solicitud es un get o un head
  • para el código de resultado 303 se seguirá la redirección y la solicitud se transformará en un get
  • para otros casos se generará una RestClient :: Exception que contiene la respuesta, se lanzará una clase de excepción específica para conocer los códigos de error

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


rescue RestClient::ExceptionWithResponse => err