2

私は、レールを使用した新しいアプリケーションの開発について熟考しています (おそらくモデルなしで?)。私が意味したのは; バックエンドは他の言語で記述され、RESTful API を提供します。RESTful API は Rails アプリによって使用されます。

バックエンド API がすべてのデータ CRUD アクションを処理するため、Rails アプリはデータベースに直接アクセスできません。では、そのようなアーキテクチャでは Rails モデルは使用されないのでしょうか?

コントローラーから API への curl 呼び出しを直接行うこともできますが、モデルを太くしながらコントローラーを細く保ちたいと考えています。

または、モデル内で API curl 呼び出しを行うことができ、そのモデル内のデータベースに対してデータ CRUD が行われるように動作できます。

上記のいずれのシナリオでも、アクティブなレコード/ORM で動作する多くの Rails 機能や gem (Friendly_id など) を利用できません。

どの道を行けばいいのか、とても迷っています。そして、ベストプラクティスは何ですか?どのようなアーキテクチャを提案できますか? バックエンドを完全に切り離し、RESTful API のみを提供することは絶対に望んでいます。

前もって感謝します。

4

1 に答える 1

4

ActiveResourceを見てください。

最終的にモデルができあがりますが、ほとんどは 1 行しか使用しません。

あなたの API サービスにhttp://api.fart.com/products.jsonのような URLがあり、製品のリストを吐き出しているとします。このデータを使用する Rails アプリで、Productから継承するモデルを作成しますActiveResource。まず、activeresource の API URL を設定します。

class ActiveResource::Base
  self.site = "http://api.fart.com"
end

次に、Product クラスを定義します。

class Product < ActiveResource::Base; end

これで、コントローラーで次のことができます。

Product.all

そして、「http://api.fart.com/products.json」にヒットし、良いものを返すはずです。

明らかに、これはすぐに考案された例ですが、最近、同様の状況で使用したところ、うまく機能しました。

///////////////

基本的なコンセプトについては、アプリケーション例を参照してください。

///////////////

あなたの質問と github でのプル リクエストにより、あなたが今何をしようとしているのか理解できます。にはメソッドActiveResourceが付属していませんが、そのメソッドには params ハッシュをサポートする options 引数があります。wherefind

クエリ パラメータを持つ Rails コントローラ

def index
  @products = Product.find :all, params: { country: "Brazil", price: 500 }
end

これは、api.fart.com/products.json?country=Brazil&price=500 の Sinatra ルートにヒットします。

# Assume we are using ActiveRecord/DataMapper or the like
get "/products.json" do
  @products = Product.where country: params[:country], price: params[:price].to_i
  json products: @products
end
于 2012-10-24T06:34:21.717 に答える