2014-07-02 56 views
1

我熟悉API。首先,我使用Forecast APIRails讀取API響應標題

在文檔中,您會找到一個標題爲「響應標題」的小節。他們是什麼,我如何使用它們?

此外,爲了得到迴應,它說你需要傳遞一個API密鑰以及經緯度和長數據。但是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"] %> 
+1

'default_params'會將參數添加到URL中 - 在這種情況下,您的網址將以'?apiKey = abcde'結尾。在'self.get_weather'中,'apiKey'將是未定義的。 –

回答

1

你在這裏問幾個不同的問題。

  • 響應頭:它們是HTTP響應的一部分,並且包含關於響應信息。例如,他們可能會告訴你響應的MIME類型 - 例如。 Content-Type: application/json。在這種情況下,Forecast會使用它來告訴您有多少個API調用(X-Forecast-API-Calls),以及他們需要多長時間回覆(X-Response-Time)以及一些緩存信息。

  • API密鑰:是的,這些應該保密。 Forecast API可以通過HTTPS工作,因此(理論上)您的API密鑰應該保密,以防止人們嗅探網絡上的流量。主要的危險在於將其保存在代碼中,例如將其提交給GitHub。你應該找出一種安全的方式來存儲API密鑰。一個例子雖然不完美,但將其作爲一個環境變量。

我希望有幫助。

+0

如何訪問這些標題數據。我做了'JSON.parse(@ response.headers)',並沒有奏效。 – arjun

+0

響應標題不會是JSON,而是哈希。所以你可以這樣做:'@ response.headers ['X-Response-Time']'。要看到整個事情,請嘗試打印'@ response.headers'或'@ response.headers.inspect'。 –

+0

謝謝。還有一件事關於API密鑰。因爲我在控制器中設置密鑰,所以我怎樣才能在模型中設置它(然後在env文件中),並將其包含在get參數中(請參閱更新後的問題,它具有default_params)。簡單地調用'#{apiKey}'無效。 – arjun