gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 08:39:35 24 4
gpt4 key购买 nike

我一直在考虑用 Rails 开发一个新的应用程序(可能没有模型?)。我的意思是;后端将用任何其他语言编写,并将提供 RESTful API,这些 API 将由 Rails 应用程序使用。

因为后端 API 将处理所有数据 CRUD 操作,而 Rails 应用程序将无法直接访问数据库。那么在这种架构中没有使用 rails 模型吗?

我也可以直接从 Controller 对 API 进行 curl 调用,但我希望在胖模型时让我的 Controller 保持 slim 。

或者以其他方式,可以在模型中进行 API curl 调用,它的行为就像对该模型中的数据库进行数据 CRUD 一样。

在上述任何一种情况下,我都无法利用许多适用于事件记录/ORM 的 Rails 功能或 Gem(例如 friendly_id)。

我真的很困惑,我应该走哪条路?最佳做法是什么?你可以建议什么架构?我绝对想让我的后端完全解耦,只提供 RESTful api。

提前致谢。

最佳答案

看看ActiveResource .

你最终会得到模型,但大多数只会占用一行。

假设您的 api 服务有一个 url,如:http://api.fart.com/products.json它吐出一个产品列表。在将使用此数据的 Rails 应用程序中,创建一个继承自 ActiveResourceProduct 模型。首先,为 activeresource 设置你的 api url。

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

接下来,定义一个 Product 类。

class Product < ActiveResource::Base; end

现在,在您的 Controller 中,您可以:

Product.all

它应该点击“http://api.fart.com/products.json”并返回好东西。

显然这是一个快速设计的示例,但我最近将它用于类似的情况并且效果很好。

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

参见 example applications基本概念。

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

根据你在 github 上的问题和拉取请求,我明白你现在想做什么。 ActiveResource 不带有 where 方法 - 但是,它的 find 方法有一个支持参数散列的选项参数。

带有查询参数的 Rails Controller

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

关于ruby-on-rails - 没有模型的 Ruby on Rails - 如果数据 CRUD 由 webservices API 执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13043183/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com