Typhoeus: Cliente HTTP de Alto Desempenho para Ruby com Solicitações Paralelas

Introdução ao Typhoeus

Typhoeus é uma biblioteca Ruby para requisições HTTP baseada no libcurl, projetada para oferecer desempenho superior e funcionalidades avançadas, como processamento paralelo e upload de arquivos. Esta ferramenta é ideal para desenvolvedores que buscam eficiência em aplicações que lidam com múltiplas requisições de rede.

Instalação Rápida

Para adicionar o Typhoeus ao seu projeto, utilize o gerenciador de pacotes Ruby. Execute o seguinte comando no terminal:

gem install typhoeus

Alternativamente, insira a linha abaixo no seu arquivo Gemfile:

gem 'typhoeus', '~> 1.4'

Uso Básico para Requisições HTTP

Inicie com uma requisição simples para entender a API do Typhoeus. Aqui, fazemos uma solicitação GET a um endpoint de exemplo:

resposta_http = Typhoeus::Request.execute(
  url: "http://api.dados.org/recursos",
  method: :get,
  params: { chave: "valor" },
  timeout: 10
)
puts resposta_http.code  # Exibe o código de status HTTP
puts resposta_http.body  # Exibe o corpo da resposta

Processamento Paralelo com Hydra

Para otimizar o tempo de execução ao enviar múltiplas requisições, empregue o gerenciador Hydra. Ele permite enfileirar e executar requisições simultaneamente:

gerenciador = Typhoeus::Hydra.hydra
solicitacoes = []

1..8.times do |i|
  req = Typhoeus::Request.new("http://exemplo.com/recurso/#{i}")
  gerenciador.queue(req)
  solicitacoes << req
end

gerenciador.run

solicitacoes.each do |sol|
  puts "Status da requisição #{sol.url}: #{sol.response.code}"
end

Funcionalidades Avançadas

Sistema de Cache

Typhoeus integra um mecanismo de cache para armazenar respostas e reduzir chamadas de rede. Configure um cache personalizado implementando a interface de cache:

class MeuCache
  def get(request_hash)
    # Lógica para recuperar do cache
  end

  def set(request_hash, response)
    # Lógica para salvar no cache
  end
end

Typhoeus::Config.cache = MeuCache.new

Tratamento de Erros

Implemente callbacks para gerenciar falhas de rede de forma elegante:

sol_req = Typhoeus::Request.new("http://site.invalido")
sol_req.on_complete do |resposta|
  case true
  when resposta.success?
    puts "Sucesso: Dados recebidos."
  when resposta.timed_out?
    puts "Erro: Tempo limite excedido."
  when resposta.code == 0
    puts "Erro: Falha na conexão."
  else
    puts "Erro HTTP: #{resposta.code}"
  end
end
sol_req.run

Otimização de Desempenho

Ajuste parâmetros chave para melhorar a eficiência:

  • Defina a concorrência máxima com max_concurrency no Hydra para controlar paralelismo.
  • Habilite cache para requisições repetitivas a fim de diminuir a latência.
  • Configure timeouts adequados (por exemplo, timeout: 5) para evitar bloqueios longos.

Casos de Uso Comuns

Typhoeus é particularmente útil em cenários como:

  • Web Scraping: Acelere a coleta de dados de múltiplas páginas usando requisições paralelas.
  • Integrações com APIs: Integre-se a serviços externos com alta taxa de requisições.
  • Upload de Arquivos: Transfira arquivos grandes de forma eficiente com suporte nativo.

Perguntas Frequentes

Como verificra a versão do Typhoeus instalada?
Execute puts Typhoeus::VERSION em um script Ruby.

É possível desativar a verificação SSL?
Sim, adicione ssl_verifypeer: false nas opções da requisição, mas somente em ambientes controlados.

Tags: typhoeus Ruby http-client libcurl parallel-requests

Publicado em 6-9 03:09 por Thomas