用于Rails 4中JSON处理的jbuilder vs rails-api/active_model_serializers

brg*_*brg 35 ruby ruby-on-rails jbuilder active-model-serializers ruby-on-rails-4

我已经开始了Rails 4.

在处理JSON格式数据时,我发现我们可以使用rails/jbuilder并且运行良好.

但是,当我拿着Codeschool的Rails 4 Pattern时,他们提到了gem active_model_serializers.

对于active_model_serializersgem而言,所有JSON序列化逻辑都会进入Model(被认为是最佳实践).

而对于jbuildergem,我们需要编写带扩展名的单独视图文件.json.jbuilder.

我的问题是:

  • 哪一个是JSON数据处理的理想选择
  • 两者之间的任何性能差异

pow*_*tom 54

这取决于您的偏好和需求.

如果你正在使用Ember.js前端,我会倾向于active_model_serializersEmber.js基本上是精心设计的(Yehuda Katz是active_model_serializersEmber.js的核心团队之一; 他是前一段时间就这个话题发表了演讲.

快速分解:

主动模型序列化器

将序列化问题分离到自己的文件夹中/app/serializers,附带自己的Rails生成器,它的行为更像ActiveRecord,因为您可以在序列化程序中定义关联.然后它会根据其固有的惯例(例如骆驼套管,侧面装载协会等)自动做正确的事情.Ryan Bates在这个主题上有一个很棒的RailsCast剧集:http://railscasts.com/episodes/409-active-model-serializers

在Jbuilder

Jbuilder采用几乎相反的方法,因为它认为JSON格式构造只是另一个Rails视图.您/app/views/可以像在视图模板中一样在相应的目录中构建响应.它可以承担视图模板的许多特征,比如理解什么current_user是开箱即用(这不是AMS的直接),链接关系(@user.posts)......等等.当然,Ryan Bates也做了关于这个主题的RailsCast:http://railscasts.com/episodes/320-jbuilder

替代方案:Rabl

Ryan Bates(自然)也在Rabl上制作了一个RailsCast:http://railscasts.com/episodes/322-rabl .从概念上讲,它比AMS更接近Jbuilder.而且它也存在更长时间.就个人而言,我不太喜欢它的语法.但这是一个意见问题.


如果我没有参与Ember.js项目的工作,我会选择Jbuider,因为它的简单性和更平易近人的概念.

至于性能,至少有一个用户声称你可以比Rabl和AMS更快地制作Jbuilder:https://medium.com/@lgmspb/how-we-increased-the-speed-of-json-generation-通过-3000倍,ca9395ab7337


跟进(2015年1月22日): Leigh Halliday写了一篇很好的速成课程,比较了一些宝石.除了这里提到的那些之外,本文还介绍了另外几种替代方案. http://www.leighhalliday.com/posts/responding-with-json-in-rails

  • 我完全同意“这取决于您的偏好和需求。” 我写了一篇关于各种 JSON 序列化选项的更新评论,您可能会发现它们很有帮助。[哪个 JSON 序列化器用于新的 Rails API?](http://www.carlosramireziii.com/which-json-serializer-to-use-for-a-new-rails-api.html?utm_source=stackoverflow) (2认同)