Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails读取API响应头_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails Rails读取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

我正在逐渐熟悉API。首先,我使用的是

在文档中,您将看到一个标题为“响应标题”的部分。它们是什么?我如何使用它们

另外,为了得到响应,它说您需要传递一个API密钥以及lat和long数据。但API密钥不应该保密吗?有人会知道请求的内容吗

这是我的代码:

预测模型

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类型-例如
    内容类型:application/json
    。在本例中,Forecast使用它来告诉您进行了多少API调用(
    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
将未定义。