繁体   English   中英

没有模型的Ruby on Rails-如果数据CRUD由Webservices API执行

[英]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应用程序中,创建一个继承自ActiveResourceProduct模型。 首先,将您的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM