[英]Ruby on rails without models - if data CRUD is performed by webservices API
我一直在考虑开发带有Rails的新应用程序(可能没有模型?)。 我的意思是 后端将以任何其他语言编写,并将提供RESTful API,这些API将由Rails应用程序使用。
由于后端API将负责所有数据CRUD操作,因此Rails应用将无法直接访问数据库。 那么在这种架构中没有使用rails模型吗?
我也可以直接从控制器对API进行curl调用,但是我希望在胖模型时保持我的控制器不动。
或以其他方式,可以在模型中进行API curl调用,其行为就像在该模型中对数据库执行数据CRUD一样。
在上述任何一种情况下,我将无法从可用于活动记录/ ORM的许多Rails功能或gems(例如friendly_id)中受益。
我真的很困惑,应该走哪条路? 最佳实践是什么? 您可以建议什么架构? 我绝对想让我的后端完全脱离耦合,并且仅提供RESTful API。
提前致谢。
看一下ActiveResource 。
您将获得模型,但大多数模型仅占用一行。
假设您的api服务有一个网址,例如: http ://api.fart.com/products.json,它会列出产品列表。 在将使用此数据的Rails应用程序中,创建一个继承自ActiveResource
的Product
模型。 首先,将您的API网址设置为activeresource。
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
不带有where
方法-但是,它的find
方法具有一个支持params哈希的options参数。
具有查询参数的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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.