【问题标题】:where do I implement calls to external clients in rails app我在哪里可以在 Rails 应用程序中实现对外部客户端的调用
【发布时间】:2011-10-07 16:56:35
【问题描述】:

我正在编写一个 Rails 应用程序,它调用多个外部 Web API,例如 Geonames。我的想法是在单独的模块或类中捕获此逻辑,并从我的模型和控制器类中调用它们。是否有任何最佳实践可以放置此类代码?它应该是单独的非 ActiveRecord 模型类还是 lib 文件夹中的模块?还是在我需要它们的 ActiveRecord 类中将 WS 调用简单地实现为静态方法更好?

谢谢

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    有几种方法可以做到,但总的来说我坚持以下原则。

    1. 他们住在/lib(如果你有很多,你可以创建一个/lib/clients子目录)
    2. 它们的名称类似于GeonamesClientGeonamesWrapper
    3. 它们是您必须实例化的类
    4. 它们可能继承自基类(或者可能混合一些基本功能)
    5. HTTParty 通常是不错的选择

    一个例子;

    class ClientBase
      # maybe we pass in a logger, or something
      def initialize(options={})
      end
    
      # perhaps a central way to call the api
      def call(method_name, *args)
      end
    end
    
    class GeonamesClient < ClientBase
    
      base_uri "www.geonames.org"
    
      def postal_codes(country)
        ...
      end
    end
    

    然后实例化它并调用它。 (客户端可能会在调用之间保持某种状态)

    client = GeonamesClient.new(:logger => Address.logger)
    client.countries.each do |country|
      client.postal_codes(country)
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-02
      • 2012-02-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多