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