Ruby on rails Rails读取API响应头
我正在逐渐熟悉API。首先,我使用的是 在文档中,您将看到一个标题为“响应标题”的部分。它们是什么?我如何使用它们 另外,为了得到响应,它说您需要传递一个API密钥以及lat和long数据。但API密钥不应该保密吗?有人会知道请求的内容吗 这是我的代码: 预测模型Ruby on rails Rails读取API响应头,ruby-on-rails,ruby,Ruby On Rails,Ruby,我正在逐渐熟悉API。首先,我使用的是 在文档中,您将看到一个标题为“响应标题”的部分。它们是什么?我如何使用它们 另外,为了得到响应,它说您需要传递一个API密钥以及lat和long数据。但API密钥不应该保密吗?有人会知道请求的内容吗 这是我的代码: 预测模型 require 'json' class Forecast include HTTParty debug_output $stdout default_params :apiKey => 'xxxxxxxxxxxxx
require 'json'
class Forecast
include HTTParty
debug_output $stdout
default_params :apiKey => 'xxxxxxxxxxxxxxxxxxxxxxxxx'
base_uri "api.forecast.io"
format :json
def self.get_weather(api,lat,long)
@response = get("/forecast/#{apiKey}/#{lat},#{long}")
end
def self.show_weather
JSON.parse(@response.body)
end
end
预测控制器
def index
@weather = Forecast.get_weather("28.5355", "77.3910")
@response = Forecast.show_weather
end
<%= @response["currently"]["summary"] %>
预测视图
def index
@weather = Forecast.get_weather("28.5355", "77.3910")
@response = Forecast.show_weather
end
<%= @response["currently"]["summary"] %>
您在这里问了几个不同的问题
- 响应头:它们是HTTP响应的一部分,包含有关响应的信息。例如,他们可能会告诉您响应的MIME类型-例如
。在本例中,Forecast使用它来告诉您进行了多少API调用(内容类型:application/json
)以及它们响应所用的时间(X-Forecast-API-calls
)以及一些缓存信息X-Response-Time
- API密钥:是的,这些密钥应该保密。Forecast API通过HTTPS工作,因此(理论上)您的API密钥应该对嗅探您网络流量的人保密。主要的危险是将其保存在代码中,例如,将其提交给GitHub。您应该找到一种更安全的方法来存储API密钥。一个例子,虽然不是完美的,但将其作为一个环境变量
我希望这能有所帮助。如何访问这些标题数据。我做了
JSON.parse(@response.headers)
,但它不起作用。响应头不是JSON,而是散列。因此,您可以执行如下操作:@response.headers['X-response-Time']
。要查看整个内容,请尝试打印@response.headers
,或@response.headers.inspect
。谢谢。关于API密钥还有一件事。由于我正在控制器中设置密钥,如何在模型中设置它(然后在env文件中设置),并将其包含在get参数中(请参见更新的ques,它具有默认参数)。简单地调用{apiKey}
不起作用。默认参数将把参数添加到URL中-在这种情况下,URL将以?apiKey=abcde
结尾。在self.get_weather
中,apiKey
将未定义。