如何使用JSON服务作为Rails 3.2应用程序的模型?
我想将模型方法链接到JSON请求。
MyModel.create
生成一个创建新记录的JSON请求MyModel.find
生成JSON请求以检索记录并将JSON响应解码为模型对象构建这种功能的首选方法是什么?我正在考虑的一个选项是创建一个自定义DataMapper适配器。
谢谢。
更新:
请注意,我不能使用ActiveResource,因为这需要JSON服务以某种方式进行响应,而在本例中却并非如此。
发布于 2012-08-13 21:22:07
简短的回答:这取决于您的JSON服务。
对于初学者来说,服务是RESTful吗?如果是的话,你很幸运。ActiveResource是死了,所以我不建议使用它,但是代码本身将为创建一组包装器方法(如create
和find
)提供一个很好的起点,以访问您的API,并按照ActiveRecord在DB中创建和查询记录的方式来操作记录。如果你的API是RESTful,那就比较容易了,因为rails是围绕RESTful-ness构建的。,所以两者之间的映射变得更清晰了。
这篇文章很好地总结了这一点:
Rails使构建遵循REST原则并与Web浏览器和可编程Web同等工作的Web服务变得极其容易。事实上,许多简单性都直接来自于遵循这些原则。我们不必告诉客户端如何创建、读取、更新或删除资源,所有这些都是通过使用适当的HTTP方法来实现的。我们所要做的就是让我们的客户找到合适的地方。
如果您的服务不是RESTful,从我认为可能是这样的其他问题的评论来看,那么您的工作就会为您准备好了。ActiveModel不会为您完成这项工作:create
是用ActiveRecord::持久性定义的,find
是在ActiveRecord::FinderMethods中定义的。他们不在ActiveModel。ActiveResource能够相当容易地再现它们,因为它对与之接口的服务类型进行了假设(即它是RESTful,再加上一些其他东西)。
ActiveModel提供的所有其他东西使rails在处理模型时非常有用:它的验证系统、序列化方法、属性更改的脏跟踪、回调(before_save
、after_save
等)、翻译/本地化等等。这些都是非常有用的函数,但它们仍然给您留下了包装API调用的问题。
因此,根据我有限的经验(见我关于这一点的最后说明),以下是我的建议:
create
、find
和其他类似ActiveRecord的功能。您可能希望使用类似于法拉第或HTTParty的gem来实际向API发出请求,而不是直接使用Net::HTTP。(我从未使用过DataMapper,因此不能对此发表评论。)这将使您能够在很大程度上使用JSON服务作为Rails模型。
作为记录,我在实际实现这类事情方面的经验仅限于构建一个API包装器(正在工作中)来访问XML。包装器有一个类,其中包括用于验证对API的查询的ActiveModel验证器。我发现ActiveModel验证器对于确保正确访问API非常有用,但是包装器只用于从API中获取记录,而不是实际创建或更新记录,因此接口比我预期的要容易得多。
发布于 2012-08-03 05:28:38
我认为您要寻找的是ActiveResource
,您可以使用它而不是ActiveRecord
来使用RESTful JSON (参见此链接和这个(顶格) )
发布于 2012-08-11 09:08:30
最好的方法是实现一个ActiveModel。这个铁轨涵盖了基本内容。
https://stackoverflow.com/questions/11787394
复制相似问题