jbuilder vs rails-api/active_model_serializers для обработки JSON в Rails 4

Я начал с Rails 4.

Работая с обработкой данных формата JSON, я обнаружил, что мы можем использовать rails/jbuilder, и это работает хорошо.

Однако, когда я изучал шаблон Rails 4 от Codeschool, они упомянули гем под названием active_model_serializers.

В то время как для active_model_serializers gem вся логика сериализации JSON переходит в модель (что считается передовой практикой).

тогда как для jbuilder gem нам нужно написать отдельный файл представления с расширением .json.jbuilder.

Мои вопросы:

  • Какой из них идеально подходит для обработки данных JSON
  • Любая разница в производительности между двумя

person brg    schedule 29.09.2014    source источник
comment
с AMS логика не входит в модель   -  person apneadiving    schedule 29.09.2014
comment
он входит в модель, но не в модель объекта.   -  person Greg Olsen    schedule 27.04.2017


Ответы (1)


Это зависит от ваших предпочтений и потребностей.

Если вы работаете с интерфейсом Ember.js, я бы склонялся к active_model_serializers, так как Ember.js в основном был создан для хорошей работы с ним (Йехуда Кац является одним из сопровождающих active_model_serializers и входит в основную команду Ember.js). ; некоторое время назад он выступал на эту тему).

Быстрая разбивка:

Активные сериализаторы моделей

Разделяет проблему сериализации в отдельную папку /app/serializers, поставляется с собственным генератором Rails и ведет себя больше как ActiveRecord, поскольку вы можете определять ассоциации в сериализаторе. Затем он будет делать правильные вещи автоматически, основываясь на своих самоуверенных соглашениях (например, верблюжья оболочка, ассоциации с боковой загрузкой... и т. д.). У Райана Бейтса есть отличный выпуск RailsCast на эту тему: http://railscasts.com/episodes/409-active-model-serializers

JBuilder

Jbuilder использует почти противоположный подход в том смысле, что он считает построение формата JSON просто еще одним представлением Rails. Вы создаете свои ответы в соответствующих каталогах /app/views/ точно так же, как и с шаблонами представлений. И он может приобретать многие характеристики шаблона представления, такие как понимание того, что такое current_user, из коробки (это не так прямолинейно с AMS), связывание отношений (@user.posts)... и т. д. И, конечно же, Райан Бейтс также сделал RailsCast на эту тему: http://railscasts.com/episodes/320-jbuilder

Альтернатива: Рабль

Райан Бейтс (естественно) также сделал RailsCast на Рабле: http://railscasts.com/episodes/322-rabl. По идее, он намного ближе к Jbuilder, чем к AMS. И это также было вокруг дольше. Лично мне не очень нравится его синтаксис. Но это вопрос мнения.


Если бы я не работал над проектом Ember.js, я бы выбрал Jbuider из-за его простоты и более доступной концепции.

Что касается производительности, по крайней мере один пользователь утверждает, что вы можете сделать Jbuilder намного быстрее, чем Rabl и AMS: https://medium.com/@lgmspb/how-we-increased-the-speed-of-json-генерацияв3000раз-ca9395ab7337


Дополнение (22.01.2015): Ли Холлидей написала хороший ускоренный курс, в котором сравнила некоторые из жемчужин. В статье рассматриваются еще несколько альтернатив в дополнение к упомянутым здесь. https://www.leighhalliday.com/responding-with-json-in-rails

person poweratom    schedule 24.10.2014
comment
В документации JBuilder есть примеры, когда объект "строитель" создается внутри ActiveRecord::Model... однако вы не можете использовать какие-либо помощники URL. Это восходит к 2013 году, когда jbuilder был 1.0. - person Kurt Mueller; 05.08.2015
comment
Интересно, что другой пост в блоге находит AMS примерно в 10 раз быстрее, чем Jbuilder в некоторых случаях: /11/04/ - person Halil Özgür; 09.08.2015
comment
в личном использовании я нашел AMS быстрее при рендеринге контента, это на коробке разработки. Jbuilder IMO обладает большей гибкостью, но требует много кода для запуска. AMS имеет более быстрое время раскрутки. Основная проблема, с которой я столкнулся при работе с AMS, — это отсутствие документации для 0.10.0rc4. Ссылочные документы относятся к версии 0.9.0 и не обновлялись. - person Tom T; 28.03.2016
comment
Я полностью согласен с Это зависит от ваших предпочтений и потребностей. Я написал обновленный обзор различных вариантов сериализации JSON, которые могут оказаться полезными. Какой JSON Сериализатор для нового API Rails? - person Carlos Ramirez III; 12.10.2017