web-dev-qa-db-fra.com

jbuilder vs Rails-api / active_model_serializers pour la gestion JSON dans Rails 4

J'ai commencé par Rails 4.

En travaillant avec la gestion des données au format JSON, j'ai trouvé que nous pouvions utiliser Rails/jbuilder et fonctionne bien.

Cependant, quand je prenais Codeschool Rails 4 Pattern , ils ont mentionné un joyau appelé active_model_serializers .

Tandis que pour active_model_serializers gem, toute la logique de la sérialisation de JSON va dans Model (qui est considéré comme les meilleures pratiques).

alors que pour jbuilder gem, nous devons écrire un fichier de vue séparé avec l'extension .json.jbuilder.

Mes questions sont:

  • Lequel est idéal pour la gestion des données JSON
  • Toute différence de performances entre deux
35
brg

Cela dépend de vos préférences et de vos besoins.

Si vous travaillez avec le front-end d'Ember.js, je pencherais pour active_model_serializers Car Ember.js a été conçu pour fonctionner correctement avec lui (Yehuda Katz est l'un des mainteneurs de active_model_serializers et fait partie de l'équipe de base pour Ember.js; il a donné une conférence sur le sujet il y a quelque temps).

Répartition rapide:

Sérialiseurs de modèles actifs

Sépare le problème de sérialisation dans son propre dossier /app/serializers, Est livré avec son propre générateur Rails, et il se comporte plus comme ActiveRecord en ce que vous pouvez définir des associations dans le sérialiseur. Ensuite, il ' ll fera automatiquement les bonnes choses sur la base de ses conventions d'opinion (par exemple, boîtier de chameau, associations de chargement latéral, etc.) Ryan Bates a un excellent épisode de RailsCast sur le sujet: http://railscasts.com/episodes/409-sérialiseurs de modèles actifs

Jbuilder

Jbuilder adopte une approche presque opposée en ce qu'il considère que la construction du format JSON n'est qu'une autre vue Rails. Vous construisez vos réponses dans les répertoires /app/views/ Correspondants comme vous le feriez avec des modèles de vue. Et il peut prendre de nombreuses caractéristiques d'un modèle de vue, comme comprendre ce qu'est current_user, Hors boîte (ce n'est pas aussi simple avec AMS), enchaîner les relations (@user.posts). .. etc. Et bien sûr, Ryan Bates a également fait un RailsCast sur le sujet: http://railscasts.com/episodes/320-jbuilder

Alternative: Rabl

Ryan Bates (naturellement) a également fait un RailsCast sur Rabl: http://railscasts.com/episodes/322-rabl . En concept, il est beaucoup plus proche de Jbuilder que d'AMS. Et cela existe également depuis plus longtemps. Personnellement, je n'aime pas beaucoup sa syntaxe. Mais c'est une question d'opinion.


Si je ne travaillais pas sur un projet Ember.js, j'irais avec Jbuider pour sa simplicité et le concept plus accessible.

En ce qui concerne les performances, au moins un utilisateur affirme que vous pouvez rendre Jbuilder beaucoup plus rapide que Rabl et AMS: https://medium.com/@lgmspb/how-we-increased-the-speed-of- json-generation-by-3000-times-ca9395ab7337


Suivi (22/01/2015): Leigh Halliday a écrit un cours intensif de Nice comparant certaines des gemmes. L'article couvre quelques autres alternatives en plus de celles mentionnées ici. http://www.leighhalliday.com/posts/responding-with-json-in-Rails

54
poweratom