使用RestClient传入API密钥和参数

时间:2015-06-14 17:31:25

标签: ruby sinatra

在我的应用程序中,我有一个表单中的用户传递,该表单会触发API请求,然后显示查询结果。

我允许用户选择多个或几个参数。我得到的问题是401授权错误,我认为这是因为apikey没有被识别(没有密码,api所需的用户名和无限制)。

申请:

post '/search' do 

    phrase = params.fetch "phrase" #mandatory
    @delimiters = ""

    start_date = params.fetch "start_date"
    start_date.empty? ? start_date = "" : @delimiters << "From #{start_date},"

    end_date = params.fetch "end_date" 
    end_date.empty? ? end_date = "" : @delimiters << "To #{end_date}"

    api_result = RestClient::Request.execute(method: :get, url: "capitolwords.org/api/1/text.json?phrase=#{phrase}
                                         &page=0&apikey=", 
                                         headers: {params: {:start_date => start_date, 
                                         :end_date => end_date},
                                         :Authorization => ENV['SUNLIGHT_API_KEY']}, 
                                         timeout: 10)       
end

分隔符是我用来捕获传入的所有参数的,因此我可以向用户显示他们搜索的内容。我在https://github.com/rest-client/rest-client阅读了文档,他们没有提到传递api密钥。

这是重构过程的一部分 - 在#{@ parameter_example}工作时逐个传递参数,但是我的代码可读性较差,然后我必须手动设置@parameter_example =“&amp; parameter_example =#{parameter_example} “这似乎过于冗长。

2 个答案:

答案 0 :(得分:3)

capitalwords.org documentation判断,似乎api key以及phrasestart_dateend_date参数应作为query string.的一部分传递{3}}所以你的rest-client请求应如下所示:

api_result = RestClient::Request.execute(method: :get, 
                                            url: "capitolwords.org/api/1/text.json", 
                                        headers: {params: {:phrase => phrase, 
                                                           :start_date => start_date,
                                                           :end_date => end_date,
                                                           :page => 0,
                                                           :apikey => ENV['SUNLIGHT_API_KEY']}}, 
                                        timeout: 10)       

我认为为了将这样的params(使用header params hash)传递给RestClient::Requeest.execute,那么你请求的url不应该包含任何params,否则rest-client无法生成正确的url。这就是我将pagephrase从url移动到params短语哈希的原因。

答案 1 :(得分:0)

您是否记得在文件顶部执行以下操作?

require 'dotenv'
Dotenv.load