7

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

我最初的直觉是重新创建我想要的 ActiveRecord 部分并合并此 API。不想“重新发明轮子”并确切地看到添加更多功能需要做多少工作,这让我退后一步,重新评估如何解决这个问题。

我找到了在没有表格的情况下使用 ActiveRecord 的方法(请参阅:Railscast #193 Tableless Model 和此处的博客文章)并查看了 ActiveRecord。因为 ActiveModel 似乎只包含验证,所以我不确定这在这种情况下是否很有帮助。在没有表格的情况下使用 ActiveRecord 的解决方法似乎是最好的选择,但我怀疑有一种更简洁的方法来做到这一点,而我只是没有看到。

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

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

4

1 回答 1

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

因此,您最终编写本地抽象来从 api 调用创建 ruby​​ 对象,您可能还可以将 ActiveModel 或 Virtus 混入其中,因此您可以使用属性的哈希分配和表单验证等。

看看我为管道的 TfL 提要所做的 API 抽象。服务中断

于 2013-06-12T17:41:09.863 回答