Simplicando requisições HTTP com Faraday

Dicas - 20/Abr/2020 - por André Kanamura

O Faraday é uma gem que nos ajuda a lidar com requisições HTTP em aplicações Ruby on Rails. Vamos mostrar uma forma de usar essa ferramenta utilizando uma aplicação hipotética em que acessamos uma API para receber dados e criar uma série de produtos que serão apresentados ao consumidor. Criamos um PORO (Plain old Ruby Object) com a classe Product, o código poderia ficar semelhante ao seguinte:

class Product
  attr_acessor :id, :key
  def initialize(id, key)
    @id = id
    @key = key    
  end

  def self.all
    require 'net/http'
    uri = URI('http://localhost:3000/')
    http = Net::HTTP.new(uri.host, uri.port)
    http.use_ssl = true
    req = Net::HTTP::Get.new('/api/v1/product_types')
    response = http.request(req)

    json = JSON.parse(response.body, symbolize_names: true)
    result = json.map do |item|
        item = new(item[:id], item[:product_key])
    end
    result
  end

Note como, na classe acima, uma grande parte do código consiste na configuração da requisição HTTP. O Faraday nos ajuda a reduzir bastante esse código, além de oferecer uma série de funcionalidades que nos dão flexibilidade na hora de implementar métodos. Em nossa aplicação hipotética, usando o Faraday, a classe Product poderia ficar assim:

class Product
  attr_acessor :id, :key
  def initialize(id, key)
    @id = id
    @key = key    
  end

  def self.all
    response = Faraday.get('http://localhost:3000/api/v1/product_types')

    json = JSON.parse(response.body, symbolize_names: true)
    result = json.map do |item|
        item = new(item[:id], item[:product_key])
    end
    result
  end

Este é apenas um exemplo simplificado de aplicação do Faraday. Você pode ver outras funcionalidades na documentação oficial.

Foto de perfil do autor
André Kanamura

Dev na Campus Code