gpt4 book ai didi

ruby-on-rails - 使用 JSON 服务作为 Rails 模型

转载 作者:行者123 更新时间:2023-12-04 15:14:02 26 4
gpt4 key购买 nike

如何使用 JSON 服务作为 Rails 3.2 应用程序的模型?

我想将模型方法链接到 JSON 请求,例如

  • MyModel.create生成 JSON 请求以创建新记录
  • MyModel.find生成 JSON 请求以检索记录并将 JSON 响应解码为模型对象

  • 构建此类功能的首选方法是什么?我正在考虑的一个选项是创建一个自定义 DataMapper适配器。

    谢谢。

    更新:
    请注意,我不能使用 ActiveResource,因为这需要 JSON 服务以某种方式响应,而在本例中则没有。

    最佳答案

    简短回答:这取决于您的 JSON 服务。

    对于初学者来说,服务是 RESTful 吗?如果是这样,那么你很幸运。 ActiveResource 是 dead ,所以我不建议使用它,但代码本身将为创建一组包装方法(如 create)提供一个很好的起点。和 find以 ActiveRecord 在数据库中创建和查询记录的方式访问您的 API 和操作记录。如果您的 API 是 RESTful,那相对容易,因为 rails is built around RESTful-ness ,因此两者之间的映射变得更加清晰。

    This article总结的很好:

    Rails makes it extremely easy to build Web services that follow the REST principles and work equally well with Web browsers and the programmable Web. In fact, a lot of that simplicity comes directly from following these principles. We didn’t have to tell our client how to create, read, update or delete the resource, those all followed from using the proper HTTP methods. All we had to do is point our client at the right place.



    如果您的服务不是 RESTful,从我认为可能是这种情况的其他问题的评论来看,那么您的工作将被裁掉。 ActiveModel 不会为您完成这项工作: createActiveRecord::Persistence 中定义, 和 findActiveRecord::FinderMethods 中定义.
    它们不在 ActiveModel 中。 ActiveResource 能够相当容易地重现它们,因为它假设它所连接的服务类型(即它是 RESTful 的,以及其他一些东西)。

    ActiveModel 提供的是使 Rails 在处理模型时如此有用的所有其他东西:它的验证系统、序列化方法、属性更改的脏跟踪,
    回调( before_saveafter_save 等)、翻译/本地化等。这些都是非常有用的函数,但它们仍然会给您带来封装 API 调用的问题。

    因此,根据我有限的经验,以下是我的建议(请参阅我对此的最后说明):
  • 首先,仔细查看您的 API 并弄清楚它与 RESTful 有多接近。如果它不是 RESTful,您将不得不考虑如何解决这个问题,以便将其视为 RESTful 服务。关于如何做到这一点的一个很好的引用是 O'Reilly 的 RESTful Web Services (特别是第 2 章,“编写 Web 服务客户端”。)
  • 围绕它创建一个 API 包装器来实现 create , find以及您想要的任何其他类似 ActiveRecord 的功能。你可能想要使用像这样的 gem
    FaradayHTTParty用于实际向 API 发出请求,而不是直接使用 Net::HTTP。 (我从未使用过 DataMapper,因此无法对此发表评论。)
  • 包括你想用来让你的包装类更像一个 rails 模型的任何 ActiveModel 元素:验证、序列化等。在 Rails 4 中,你实际上可以使用新的准系统来包含所有内容 ActiveModel::Model .

  • 这将帮助您将 JSON 服务用作 Rails 模型。

    作为记录,我在实际实现这种事情方面的经验仅限于构建用于访问 XML API 的 API 包装器(正在开发中)。包装器有一个包含 ActiveModel 验证器的类,用于验证对 API 的查询。我发现 ActiveModel 验证器对于保证 API 被正确访问非常有用,但包装器仅用于从 API 获取记录,而不用于实际创建或更新它们,因此界面比我预期的要容易得多你会 build 。

    关于ruby-on-rails - 使用 JSON 服务作为 Rails 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11787394/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com