2012-02-08 1 views
0

Мне нужно разработать небольшое приложение Rails, которое делает запрос на API JSON, вводя параметры в исходную форму, проверяем, получим ли мы реальный ответ, а затем визуализируем результаты в виде (html.erb).Приложение для запроса API JSON (рельсы), результаты рендеринга

Вы знаете, где я могу получить хороший материал, чтобы сделать эти шаги? Любая помощь приветствуется.

Я читаю некоторый ряд примера:

params_string = "whatever" 
    params_string_with_api_key = params_string + "&" + @@API_KEY 
    hashkey = Digest::SHA1.hexdigest(params_string_with_api_key) 
    params_string += "&hashkey=#{hashkey}" 

    res = Net::HTTP.get_response("api.somecompany.com", "/some/url.json?#{params_string}") 

    res_sha1 = Digest::SHA1.hexdigest(res.body + @@API_KEY) 

    @verified = res["X-Somecompany-Response-Signature"] == res_sha1 

    parsed_json = ActiveSupport::JSON.decode(res.body) 
    @results = parsed_json["results"] 

Всегда ли необходимый для кодирования строки параметров, когда вы делаете запрос HTPP в Net ::? Есть ли другой способ?

Что именно params_string += "&hashkey=#{hashkey}"?

Спасибо!

ответ

0

Что именно означает params_string + = "& hashkey = # {hashkey}"?

params_string - это строка, которая выглядит как ?param1=val&param2=val2.... Ваша последняя часть кода просто добавляет другой параметр в строку. Если ваша проблема связана с фрагментом #{}, этот синтаксис в рубиновой строке с двумя кавычками позволяет использовать значение var.

Всегда необходимо кодировать строку параметров, когда вы выполняете запрос Net :: HTPP? Есть ли другой способ?

Я не вижу здесь строки параметров. Все, что я вижу, это проверка результатов, проведенная путем сравнения заголовка ответа с телом ответа SHA1'd.

Не имеет отношения к вашим вопросам: я ушел из Net :: HTTP некоторое время назад, столкнувшись с segfault. Теперь я использую Typhoeus для всех запросов по сети.

+0

Вопрос о Typhoeus: Могу ли я использовать «response.body» из Typhoeus так же, как я использую 'res.body', используя NET :: HTTP? Я имею в виду, из моего примера выше, мне просто нужно переключить эту строку: res = Net :: HTTP.get_response ("api.somecompany.com", "/some/url.json?#{params_string} ") Как будет использоваться код Typhoeus? –

+0

Typhoeus README довольно полно для этой информации. Вы можете использовать объект 'Typhoes :: Request', который вы ставите в очередь в экземпляре' Typhoeus :: Hydra', а затем запускаете. Или вы можете использовать «быстрый» способ с помощью 'res = Typhoeus :: Request.get (url, ...)'. В любом случае, как только вы получили ответ, вы можете использовать 'reponse.body' так же, как вы его используете прямо сейчас. – ksol

Смежные вопросы