web-dev-qa-db-ja.com

Rails 4でのJSON処理のためのjbuilder対Rails-api / active_model_serializers

Rails 4から始めました。

JSON形式のデータの処理を行っているときに、 Rails/jbuilder を使用でき、うまく機能することを発見しました。

しかし、私が Codeschool's Rails 4 Pattern を取っているとき、彼らは active_model_serializers と呼ばれる宝石に言及しました。

active_model_serializers gemの場合、JSONシリアライゼーションのすべてのロジックはモデルに入ります(これはベストプラクティスと見なされます)。

一方、jbuilder gemの場合、拡張子.json.jbuilderを使用して個別のビューファイルを書き込む必要があります。

私の質問は:

  • JSONデータ処理に最適なもの
  • 2つの間のパフォーマンスの違い
35
brg

それはあなたの好みとニーズに依存します。

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

54
poweratom