Подтвердить что ты не робот

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

Я начал начинать с Rails 4.

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

Однако, когда я принимал Codeschool Rails 4 Pattern, они упомянули драгоценный камень под названием active_model_serializers.

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

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

Мои вопросы:

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

Ответ 1

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

Если вы работаете с интерфейсом Ember.js, я склоняюсь к active_model_serializers, так как Ember.js был в основном создан для работы с ним (Yehuda Katz является одним из разработчиков 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

Альтернатива: Rabl

Райан Бейтс (естественно) сделал RailsCast на Rabl: 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-generation-by-3000-times-ca9395ab7337


Последующий отчет (01/22/2015): Leigh Halliday написал хороший краш-курс, сравнивающий некоторые из драгоценных камней. В статье рассматриваются еще несколько альтернатив в дополнение к упомянутым здесь. http://www.leighhalliday.com/posts/responding-with-json-in-rails