【发布时间】:2021-11-16 20:23:14
【问题描述】:
我正在尝试创建一个用于充值的 API 包装器(Shopify 订阅服务),我正在使用 HTTParty gem
module RechargeAPI
require 'httparty'
BASE_URI = 'https://api.rechargeapps.com'
API_TOKEN = 'my_token'
class Client
include HTTParty
base_uri BASE_URI
headers 'X-Recharge-Access-Token': API_TOKEN
end
class Customer < Client
def self.search(params)
response = get('/customers', query: params)
self.from_json(response.body)
end
def self.find(params)
self.search(params).first
end
def self.all
response = get('/customers')
self.from_json(response.body)
end
def self.from_json(customers_json)
customers = JSON.parse(customers_json).dig('customers')
customers.map do|customer| OpenStruct.new(customer)
end
end
end
end
RechargeAPI::Customer.find(shopify_customer_id: 5363543224286) # returns <OpenStruct accepts_marketing=nil, analytics_data={"utm_params"=>[]}, billing_address1=....
它工作正常,但是我觉得我没有使用编写 api 包装器的最佳实践。
理想情况下,我会将我的 api 令牌设置为 RechargeAPI.api_token = 'token' 之类的东西,而不是硬编码或在 ENV 文件中。但我不知道我会如何使用headers 'X-Recharge-Access-Token': API_TOKEN
理想情况下,RechargeAPI::Customer.find(shopify_customer_id: 5363543224863) 将返回 RechargeAPI::Customer 对象而不是 OpenStruct。我希望能够从 Struct 继承,但显然我不能,因为我是从 RechargeAPI::Client 类继承的。
任何人都可以建议我如何进行此操作,或以任何方式改进此代码。 谢谢!
【问题讨论】:
标签: ruby api oop refactoring