Consumiendo Web Services con RoR
Hace unos meses tenía entre manos una aplicación que consumía Web Services de una API que servía la información en varios formatos (XML, YAML, texto plano y PHP serializado -entre otros-). Para ello se ideó un proceso que con el tiempo se vio que era bastante chapucero, pues se basaba en varias peticiones HTTP y la escritura de su resultado en archivos temporales. Debido a ello, en ocasiones el rendimiento caía en picado, cosa que pasaba hasta que descubrí la forma correcta de manejar este flujo de datos:

-
def get_data(data_url)
-
begin
-
url = URI.parse(data_url)
-
res = Net::HTTP.get_response(url)
-
YAML.load(res.body)
-
rescue Exception => e
-
Rails.logger.error "ERROR: #{e}"
-
false
-
end
-
end
Nueve sencillas líneas de código es lo único que necesitamos para lograr este objetivo. Primero, lo encapsulamos todo en un bloque que pueda capturar una posible excepción (”begin [...] rescue“). En la primera parte del mismo obtenemos el contenido y lo parseamos con la herramienta correspondiente al formato de salida que elijamos (YAML en este caso). En la segunda, guardamos en el log el nombre del problema ocurrido y devolvemos “false“.
