где я могу реализовать звонки внешним клиентам в приложении rails - PullRequest
1 голос
/ 07 октября 2011

Я пишу приложение rails, которое выполняет вызовы нескольких внешних веб-API, например, Geonnames. Моя идея состоит в том, чтобы захватить эту логику в отдельных модулях или классах и вызывать их из моей модели и классов контроллеров. Есть ли лучшие практики, где разместить такой код? Должен ли это быть отдельный класс модели не-ActiveRecord или модуль в папке lib? Или лучше просто реализовать вызовы WS как статические методы в классах ActiveRecord, где они мне нужны?

Thx

1 Ответ

1 голос
/ 07 октября 2011

Есть несколько способов сделать это, но обычно я придерживаюсь следующих принципов.

  1. Они живут в /lib (если у вас много, вы можете создать /lib/clients sub dir)
  2. У них есть имена, такие как GeonamesClient или GeonamesWrapper
  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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...