Rails 4
から始めました。
JSON形式のデータの処理を行っているときに、 Rails/jbuilder
を使用でき、うまく機能することを発見しました。
しかし、私が Codeschool's Rails 4 Pattern を取っているとき、彼らは active_model_serializers
と呼ばれる宝石に言及しました。
active_model_serializers
gemの場合、JSON
シリアライゼーションのすべてのロジックはモデルに入ります(これはベストプラクティスと見なされます)。
一方、jbuilder
gemの場合、拡張子.json.jbuilder
を使用して個別のビューファイルを書き込む必要があります。
私の質問は:
それはあなたの好みとニーズに依存します。
Ember.jsフロントエンドを使用している場合、Ember.jsは基本的にそれとうまく機能するように作られているため、私は_active_model_serializers
_に傾けます(Yehuda Katzは_active_model_serializers
_のメンテナーの1人であり、 Ember.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を使用して、そのシンプルさとより親しみやすいコンセプトを実現します。
パフォーマンスに関しては、少なくとも1人のユーザーが、JbuilderをRablとAMSの両方よりもはるかに高速にできると主張しています: https://medium.com/@lgmspb/how-we-increased-the-speed-of- json-generation-by-3000-times-ca9395ab7337
フォローアップ(2015年1月22日):Leigh Hallidayがいくつかの宝石を比較するNiceクラッシュコースを書きました。この記事では、ここで説明したものに加えて、さらにいくつかの代替案について説明します。 http://www.leighhalliday.com/posts/responding-with-json-in-Rails