4

誰かが と の違いを説明できますActiveModel::SerializersGrape? どちらか一方を使用する必要がありますか、または一緒に使用する必要がありますか。誰かが、上記のいずれか (または両方) を使用することと、単にrails単独で使用することの利点を説明できrestful JSON APIますか?

前もって感謝します

4

1 に答える 1

12

Grape と ActiveModel のシリアライザーは、異なる目的を果たします。Grape はコントローラーとルーターの両方として機能し、アプリケーションに API を定義できます。Rails の routes.rb ファイルに、次のようなステートメントを含めて、ルーティングを Grape に渡します。

mount API::Base, at: '/'

次に、Grape から継承するクラスを作成して、API インターフェイスを定義します。

module API
  module V1
    class Companies < Grape::API

実際には、Grape が ActiveModel Serializers を利用できるようにする gem があります: http://github.com/jrhe/grape-active_model_serializers

Rails でできないことで Grape でできることはありません。Grape が人気の理由は、API の記述に最適化されているためです。たとえば、Grape では、投稿を実行するために必要な必須パラメーターを宣言し、オプションのパラメーターと区別することができます。明らかに、:id はアイテムの作成には使用されませんが、アイテムの更新には必須である必要があります。これはほんの一例です。ドキュメントはこれをよりよく説明します。

ActiveModel シリアライザーは、オブジェクトが要求されたときにオブジェクトがどのように表示されるかを定義します。オブジェクトのビュー レイヤーのようなものです。たとえば、連絡先を表示している場合、連絡先の会社と電話番号 (別の関連オブジェクト) を、返される連絡先オブジェクト内に埋め込むことができます。特定の属性を json に含めたくない場合があります。したがって、シリアライザには、これらの属性を保護するロジックを含めることができます。ActiveModel シリアライザーの便利な機能の 1 つは、関連するモデルの ID を埋め込む機能です。

于 2014-10-28T20:53:20.170 に答える