Ответ 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