在Rails 4中,jbuilder与rails-apiactive_model_serializers处理JSON的对比。

问题描述 投票:36回答:1

我已经开始从 Rails 4.

在处理JSON格式的数据时,我发现我们可以使用 rails/jbuilder 并且效果良好。

然而,当我在服用 Codeschool的Rails 4模式他们提到的宝石叫 active_model_serializers.

而对于 active_model_serializers 璠,所有的逻辑 JSON 序列化进入Model(被认为是最佳实践)。

而对于 jbuilder gem,我们需要单独写一个扩展名为 .json.jbuilder.

我的问题是。

  • 哪一个是处理JSON数据的理想选择
  • 两者之间的任何性能差异
ruby-on-rails ruby ruby-on-rails-4 active-model-serializers jbuilder
1个回答
54
投票

这取决于你的喜好和需求。

如果你是使用Ember.js前端,我会倾向于用 active_model_serializers 因为 Ember.js 基本上是为了与之配合使用而制作的 (Yehuda Katz 是 Ember.js 的维护者之一) 。active_model_serializers 他是Ember.js的核心团队成员。他做了一个演讲 前段时间的话题)。)

快速分解。

主动模型序列器

将序列化关注分离到自己的文件夹中。/app/serializers,自带Rails生成器,它的行为更像ActiveRecord,你可以在序列器中定义关联。然后它会根据它的意见约定自动做正确的事情(比如骆驼壳、侧载关联......等等)。Ryan Bates在RailsCast中有一集关于这个主题的精彩内容。http:/railscasts.comepisodes409-active-model-serializers。

Jbuilder

Jbuilder采用了几乎相反的方法,它认为JSON格式的构建只是另一个Rails视图。您可以在相应的 /app/views/ 目录,就像使用视图模板一样。而且它可以具备视图模板的许多特征,比如了解什么是 "视图模板"。current_user 是,开箱即用(这在AMS中就不那么直接了),链式关系(@user.posts)......等等。当然,Ryan Bates也就此做了一个RailsCast。http:/railscasts.comepisodes320-jbuilder。

替代品: Rabl

Ryan Bates(自然)也在Rabl上做了一个RailsCast。http:/railscasts.comepisodes322-rabl。. 在概念上,它比AMS更接近Jbuilder。而且它出现的时间也比较长。我个人不是很喜欢它的语法。但这是个见仁见智的问题。


如果我不是在做一个Ember.js项目,我会选择Jbuider,因为它的简单性和更容易接近的概念。

至于性能,至少有一个用户声称,你可以让Jbuilder比Rabl和AMS都快很多。https:/medium.com@lgmspbhow-we-increased-the-speed-of-json-generation-by-3000-times-ca9395ab7337。


跟进(01222015)。 Leigh Halliday写了一篇不错的速成文章,比较了其中的一些精华。文章除了这里提到的几款之外,还涵盖了更多的替代品。https:/www.leighhalliday.comresponding-with-json-in-rails

© www.soinside.com 2019 - 2024. All rights reserved.