在我的应用程序中,我有一个表单中的用户传递,该表单会触发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} “这似乎过于冗长。
答案 0 :(得分:3)
从capitalwords.org documentation判断,似乎api key
以及phrase
,start_date
,end_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。这就是我将page
和phrase
从url移动到params短语哈希的原因。
答案 1 :(得分:0)
您是否记得在文件顶部执行以下操作?
require 'dotenv'
Dotenv.load