簡単な答え:それはあなたのJSONサービスに依存します。
初心者にとって、サービスはRESTfulですか?もしそうなら、あなたは運がいいです。ActiveResourceは機能しcreate
ていないため、使用することはお勧めしませんが、コード自体は、APIにアクセスし、ActiveRecordがDB内のレコードを作成およびfind
クエリする方法でレコードを操作するためのラッパーメソッドのセットを作成するための良い出発点を提供します。レールはRESTful-nessを中心に構築されているため、APIがRESTfulの場合、これは比較的簡単です。そのため、2つの間のマッピングははるかにクリーンになります。
この記事はそれをうまくまとめています:
Railsを使用すると、RESTの原則に従い、Webブラウザーやプログラム可能なWebと同等に機能するWebサービスを非常に簡単に構築できます。実際、その単純さの多くは、これらの原則に従うことから直接もたらされます。リソースを作成、読み取り、更新、または削除する方法をクライアントに指示する必要はありませんでした。これらはすべて、適切なHTTPメソッドを使用して実行されました。私たちがしなければならなかったのは、クライアントを適切な場所に向けることです。
あなたのサービスがRESTfulでない場合、それはおそらくそうであると私が思う他の質問へのコメントから判断すると、あなたはあなたのためにあなたの仕事を切り取ってもらうでしょう。ActiveModelはこの作業を行いません:ActiveRecord :: Persistenceでcreate
定義され、 ActiveRecord::FinderMethodsで定義されます。それらはActiveModelにはありません。ActiveResourceは、インターフェースしているサービスのタイプ(つまり、RESTfulであるということ、およびその他のいくつかのこと)について想定しているため、それらをかなり簡単に再現できます。find
ActiveModelが提供するのは、レールをモデルの処理に非常に役立つものにする他のすべてのものです。検証システム、シリアル化メソッド、属性変更のダーティトラッキング、コールバック(before_save
、after_save
など)、変換/ローカリゼーションなどです。これらはすべて非常に便利な関数ですが、それでもAPI呼び出しをラップするという問題が残ります。
限られた経験ではありますが、これが私がお勧めするものです(それについての私の最後のメモを参照してください):
- まず、APIを詳しく調べて、RESTfulにどれだけ近いかを把握します。RESTfulでない場合は、RESTfulサービスのように扱うことができるように、これを回避する方法を検討する必要があります。これを行う方法の良い参考資料は、O'ReillyのRESTful Webサービス(具体的には、第2章「Webサービスクライアントの作成」)です。
create
、find
およびその他のActiveRecordのような機能を実装するAPIラッパーを作成します。Net :: HTTPを直接操作するのではなく、実際にAPIにリクエストを送信するために、FaradayやHTTPartyなどのgemを使用することをお勧めし
ます。(私はDataMapperを使用したことがないので、コメントすることはできません。)
- ラッパークラスをRailsモデルのようにするために使用するActiveModelの要素(検証、シリアル化など)をすべて含めます。Rails4では、新しいベアボーンActiveModel::Modelを使用してすべてを実際に含めることができます。
これにより、JSONサービスをRailsモデルとして使用する方法の多くが得られます。
ちなみに、この種のことを実際に実装した私の経験は、XML APIにアクセスするための(作業中の)APIラッパーの構築に限定されています。ラッパーには、APIへのクエリを検証するためのActiveModelバリデーターを含むクラスがあります。ActiveModelバリデーターは、APIが正しくアクセスされることを保証するのに非常に便利ですが、ラッパーはAPIからレコードを取得するためだけのものであり、実際にレコードを作成または更新するためのものではないため、インターフェイスは予想よりもはるかに簡単です。構築します。