Vic*_*tor 6 ruby-on-rails non-relational-database amazon-web-services amazon-simpledb
我正在寻找一种将ActiveResource映射到SimpleDB的方法
我想避免使用插件/宝石,因为我所使用的都是过时/错误/没有混淆
看起来似乎很难,我想知道你是否有人成功实现了一个使用simpleDB作为主动资源的rails应用程序.你是怎么做到的?谢谢.
小智 2
我没有使用过 SimpleDB,但我已将 ActiveResource 映射到 Amazon 的灵活支付服务 REST api,并浏览了它们看起来相似的文档,所以这基本上就是我所做的,也许您可以使用它作为起点。
require 'base64'
require 'openssl'
class AmazonFlexiblePaymentResource < ActiveResource::Base
self.site = AMZ_CONFIG['flexible_api_url']
def self.rest_api(options = {})
params = common_request_params.update(options)
sig = compute_signature(AMZ_CONFIG['secret_access_key'], 'get', site, params)
rest_req = {'Signature' => sig}.update(params)
# make the http get call
connection.get("/#{query_string(rest_req)}", headers)
end
protected
# these are the params are common to all rest api calls
def self.common_request_params
{ 'AWSAccessKeyId' => AMZ_CONFIG['access_key_id'],
'SignatureVersion' => 2,
'SignatureMethod' => 'HmacSHA256',
'Timestamp' => Time.now.utc.iso8601,
'Version' => '2008-09-17'}
end
def self.compute_signature(key, method, end_point_url, params)
query_str = parameters.sort.collect {|k, v| v.to_query(k)}.join '&'
# cannot use plus for space, and tilde needs to be reversed
query_str.gsub!('+', '%20')
query_str.gsub!('%7E', '~')
to_sign = [method.upcase, end_point_uri.host.downcase,
end_point_uri.request_uri, query_str].join "\n"
digest = OpenSSL::Digest::Digest.new('sha256')
hmac = OpenSSL::HMAC.digest(digest, key, to_sign)
Base64.encode64(hmac).chomp
end
end
Run Code Online (Sandbox Code Playgroud)
然后我就这样打电话
res = AmazonFlexiblePaymentResource.rest_api({ 'Action' => 'GetTransactionStatus', 'TransactionId' => '1234567890ABCDEFGHIJ' })
Run Code Online (Sandbox Code Playgroud)
响应是解析后的 xml 的哈希值。这同样适用于 Amazon 灵活支付服务,因此您可能需要进行调整以匹配 SimpleDB REST API。
| 归档时间: |
|
| 查看次数: |
743 次 |
| 最近记录: |