14

この質問の序文として: 私は Rails 開発 (および Web 開発全般) の初心者であり、私の懸念のいくつかは根拠のないものかもしれないので、フィードバックは非常に役に立ちます。

RESTful API にプラグインする Rails アプリケーションを作成しようとしています。私はこれについて最善の方法を決定しようとしてきましたが、私が理解していることから、ActiveModel を利用するか、ActiveResource を利用して、独自のモデルをゼロから作成することに絞り込まれました。

それぞれの長所/短所ははっきりしていません。率直に言って、私はまだ ActiveModel と ActiveResource の違いを完全には理解していません。これらの 3 つのオプションと、ror コンテキストで最も「意味のある」ものについて、誰かが私に洞察を提供できますか? ありがとう!

最良の答えは、単に「ActiveModel を使用する」または「ActiveResource を使用する」と指示するだけではありませんが、それも役に立ちます。なぜそのことを使用する必要があるのか​​ などを説明する回答をいただければ幸いです。

私が対処しているいくつかの制約は、API を呼び出すときにキーを使用する必要があることと、かなりの数の API 呼び出しに追加のパラメーターが含まれることです。

4

2 に答える 2

21

したがって、ここで使用するパッケージを選択するための鍵は、次のいずれかです。

  1. Web API からデータを取得していて、自分のサーバーに保存/操作したい場合、または
  2. Web API を介してデータを操作しており、サーバーに何も保存するつもりはありません。

#1の場合、ActiveRecord が必要になります。これは、Postgres/MySQL/etc データベースでデータを操作および保存するための Rails のパッケージです。

#2の場合は、ActiveResource を排他的に使用できます。これにより、Web API からデータを取得し、実行時にデータを操作してから、Web API にポストバックして変更を加えることができます。

ただし、多くのアプリケーションでは、これらのパッケージの両方を使用することがよくあります。ActiveResource を使用してデータを非常に簡単に取得し、それを ActiveRecord モデル (User や Location など) に適用すると、API からデータを何度も取得することなくローカルで使用できます。

例を挙げると、私が取り組んでいたサービスのために、公共のソースから位置情報データを取得し (郵便番号の座標を検索)、そのデータを ActiveRecord を使用してローカルの Location オブジェクトに保存したので、遅滞なく繰り返し検索できるようになりました。 Web API 呼び出しの。(頭が良ければ、Web API からこのデータを時々更新します)

ActiveResource が機能するかどうかの判断

サービス要求はドキュメンテーションプロトコルに準拠していますか? たとえば、Find メソッドのExpects a response ofブロックを見てください。もしそうなら、あなたは余分な仕事をせずに行くのが良いかもしれません.

注: Rails 3.1 の時点で、ドキュメントは変更ログと少し同期していません。

すべてのリクエストのデフォルト形式が JSON に変更されました。XML を引き続き使用する場合は、クラスで self.format = :xml を設定する必要があります。例えば。

また、ActiveResource は Rails 4.0 ブランチから完全に削除されているため、新しい Rails アプリケーションを開始することを楽しみにしており、最新かつ最高のものが必要な場合、これはまったく選択肢ではありません— しかし、すべての希望が失われるわけではありません。ファラデーなど、RESTful インターフェイスとのやり取りをより簡単にする宝石がたくさんあります(完全な開示: 私自身はファラデーを使用したことがないので、その有効性について実際にコメントできますが、ここに配置しました。他にも多くのオプションがあります。

注 (上記の同じリンクから): Active Resource は、HTTP 経由でリソースを要求および送信するための標準 XML 形式に基づいて構築されています。これは Action Controller に組み込まれた RESTful ルーティングを反映していますが、プロトコルを適切に実装する他の REST サービスとも連携します。REST は HTTP を使用しますが、「典型的な」Web アプリケーションとは異なり、HTTP 仕様で使用可能なすべての動詞を利用します。

上記の答えが「いいえ」(準拠していない) の場合は、ラッパー クラスを作成する必要があります。積極的に管理されている gem でこれがどのように行われるかの例については、Facebookerを参照してください。

参考文献: ActiveResource に関する優れたチュートリアル

アクティブレコードを始める

Web 開発を始めたばかりの場合は、データベースとモデルの基本についても理解する必要があることに注意してください。作業は大変です。:)

于 2012-06-18T16:35:08.640 に答える
1

私はそれを試してみます.他の人が来て修正(または追加)してくれることを願っています.

この 2 つの主な違いは次のとおりです。

  • ActiceResource は、(Rails) RESTful API によって (通常は) リモートでアクセスできるリソースへのインターフェイスを提供します。ローカルに保存されるのではなく、API によってのみ読み取り、更新、作成、および削除されます。Ryan Batesが述べているように、「ActiveResource を使用すると、複数の Rails アプリケーション間で簡単に通信できます。」
  • ActiveRecord (または現在の ActiveModel) は、そのレコード (またはモデル) をローカルのデータベースに保存し、他のユーザーが Web インターフェイスを使用してリモートでアクセスできるようにします。
    • ページを表示しています
    • JSON マップを返すか、
    • XML 構造を返す

長所と短所

ActiveResource を使用するには、RESTful API に互換性があるように、ローカルの Rails アプリがリモート アプリケーションと通信できることを確認する必要があります。

両方のオプションを自由に選択できる場合、いくつかの引数を次に示します。

  • 通常、ActiveResource は ActiveModel よりもコストがかかります (リモート システムの呼び出しには少なくとも時間がかかります)。
  • ActiveModel は独自のリソース (少なくともデータベースのセットアップ) を必要としますが、これは通常負担ではありません。

したがって、最終的には、何かを格納する (ActiveModel) か、何かを取得するだけ (ActiveResource) かによって異なります。つまり、ActiveResource と (おそらく) ActiveMiodel を使用することになります。

于 2012-06-18T16:41:30.020 に答える