EM-HTTP-REQUEST и SINATRA - объединение / объединение нескольких запросов API в один результат?
Мой первый раз имел дело с синатрой и параллельным em-http-запросом. И я не знаю, как объединить / объединить в один результат и когда к EventMachine.stop?, Учти это:
get '/data/:query' do
content_type :json
EventMachine.run do
http1 = EventMachine::HttpRequest.new('v1/').get
http2 = EventMachine::HttpRequest.new('v2/').get
http1.errback { p 'Uh oh nooooooo'; EventMachine.stop }
http1.callback {
// do some operation http1.repsonse
Crack::XML.parse(http1.response).to_json
EventMachine.stop
}
http2.callback {
// do some operation http2.response
Crack::XML.parse(http2.response).to_json
EventMachine.stop
}
end
somehow merge
return merged_result
end
1 ответ
Решение
В приведенном выше примере есть условие гонки - вы прекратите цикл событий, как только один из запросов будет завершен. Для решения этой проблемы вы можете использовать встроенный интерфейс "Multi":
EventMachine.run do
multi = EventMachine::MultiRequest.new
multi.add :google, EventMachine::HttpRequest.new('http://www.google.com/').get
multi.add :yahoo, EventMachine::HttpRequest.new('http://www.yahoo.com/').get
multi.callback do
puts multi.responses[:callback]
puts multi.responses[:errback]
EventMachine.stop
end
end
См. Вики-страницу em-http для получения дополнительной информации: https://github.com/igrigorik/em-http-request/wiki/Parallel-Requests