为不同服务提供商访问api所实现的设计模式

时间:2016-06-24 07:18:42

标签: ruby-on-rails ruby rails-activerecord exotel-api

我想在轨道上的ruby中添加一个功能(更像是一个gem),用户在其中指定其服务提供者名称,然后它将自动获取相关配置并将其注入模型文件并创建必要的迁移。

我的问题是我如何实现这一目标。我的意思是我应该使用哪种设计模式,以便每当用户指定其提供者名称(例如Exotel,Sinch,Twilio等)时,它会将相应的配置注入配置文件及其api设置以发送电子邮件和消息。

我已经检查了这个Question,但它似乎无法解决我的问题。

例如rails的Exotel api配置是 -

Exotel.configure do |c|
  c.exotel_sid   = "Your exotel sid"
  c.exotel_token = "Your exotel token"
end

发送消息

response = Exotel::Sms.send(:from => 'FROM_NUMBER', :to => 'TO_NUMBER', :body => 'MESSAGE BODY')
sms_id = response.sid #sid is used to find the delivery status and other details of the message in future.

虽然发送消息的sinch配置是 -

SinchSms.send('YOUR_APP_KEY', 'YOUR_APP_SECRET', "Your code is #{code}", phone_number)
render status: 200, nothing: true

现在我希望gem根据用户输入的服务提供商名称来完成所有这些工作,例如,如果用户输入Exotel而不是gem将设置exotel设置,如果是Sinch,则会设置sinch的配置。

1 个答案:

答案 0 :(得分:1)

听起来你想要适配器模式。 https://en.wikipedia.org/wiki/Adapter_pattern或者可能是api网关http://microservices.io/patterns/apigateway.html