2012-03-26 60 views
2

這是我第一次嘗試編寫Rails應用程序以使用外部Web服務。通過ActiveResource向Web服務提供憑證

我已經做了一些基本的實驗,通過ActiveResource從另一個Rails應用程序檢索一些記錄,這些記錄工作得很好,但在這種情況下,我試圖訪問第三方Web服務,在我能做任何事情之前需要非常特定的身份驗證。

有問題的服務是由DNSMadeEasy提供的REST API的文檔可在http://www.dnsmadeeasy.com/services/rest-api/

根據文檔的認證要求被定位如下:

  • 創建的字符串表示以HTTP格式顯示當前日期和時間。例如: 週六,2011年2月12日20時59分04秒GMT
  • 計算使用你的密鑰作爲哈希密鑰字符串的十六進制HMAC SHA1哈希。
  • 使用您計算的API密鑰,當前日期和時間以及HMAC散列來設置請求標頭的值。

所以我想通了,如何讓日期和計算哈希:

REQUEST_DATE = Time.now.httpdate HMAC = OpenSSL的:: HMAC.hexdigest( 'SHA1',SECRET_KEY,REQUEST_DATE)

所以我的問題有三個部分:

首先,當我向Web服務發送我的請求時,如何將這些信息插入到HTTP標頭中?

其次,我怎樣才能把所有這些放在我的ActiveResource類繼承的超類中,這樣我就不必爲Domain和ResourceRecord的類擔心了嗎?

第三,在您的應用程序中是否存儲API和密鑰的最佳做法,即應該使用初始化程序完成,還是最好使用環境變量?

對於這種工作流程的任何提示和技巧將非常感激。

感謝

回答

3

1 - 您可以通過設置一個實例變量叫做@headers這樣設置的標頭:

class Base < ActiveResource::Base 
@headers = { ‘key’ => ‘value’ } 
end 

看看源Active Resource: Headers

2 - 讓所有的資源從剛剛創建的Base中繼承,而不是從ActiveResource :: Base繼承。

3 - 我通常把那些按鍵的環境文件或者我用這個寶石SettingsLogic

+0

真棒,感謝的是,會試試看。 – 2012-03-26 05:52:17

+0

如果您認爲我回答了您的問題,您可以將其標記爲已接受:) – Nobita 2012-03-26 14:48:28