在Ruby on Rails中使用由外部API支持的模型的ActiveRecord接口

Chr*_*unt 7 ruby api ruby-on-rails

我正在尝试在我的Rails应用程序中使用模型从外部API检索信息.我想要做的是以类似于ActiveRecord模型提供的方式访问我的数据模型(可能包含多个API调用产生的信息)(特别是关联,以及相同类型的可链式查询方法).

我最初的本能是重新创建我想要的ActiveRecord部分并合并这个API.不想"重新发明轮子"并确切地看到增加更多功能需要多少工作让我退后一步并重新评估如何处理这个问题.

我已经找到了在没有表的情况下使用ActiveRecord的方法(参见:Railscast#193 Tableless Model和这里的博客文章)并查看了ActiveRecord.因为ActiveModel似乎只包含Validations,所以我不确定在这种情况下它是非常有用的.在没有表格的情况下使用ActiveRecord的解决方法似乎是最好的选择,但我怀疑有一种更清洁的方式,我只是没有看到.

是一个要点,其中包含我尝试重新创建ActiveRecord功能时编写的一些代码,这些代码是从ActiveRecord源本身大量借用的.

我的问题归结为:我可以通过实现上面指定的ActiveRecord的变通方法或者自己重新创建功能来获得我想要的功能(链接查询方法,关系),但这些是非常理想的解决方案吗?

小智 3

请记住,Rails 的底层仍然是 Ruby。

您可以将外部 API 表示为应用程序中的实例化类。

class Event
  def self.find(id)
    #...External http call to get some JSON...#
    new(json_from_api)
  end

  def initialize(json)
    #...set up your object here...#
  end


  def attendees
    #...external http call to get some JSON and then assemble it 
    #...into an array of other objects
  end
end
Run Code Online (Sandbox Code Playgroud)

因此,您最终会编写本地抽象来从 api 调用创建 ruby​​ 对象,您也可以将 ActiveModel 或 Virtus 混合到其中,这样您就可以使用属性的哈希分配以及表单验证等。

看一下我为管道的 TfL feed 所做的 API 抽象。服务中断