Ruby on rails 是否可以在一个HTTP请求中运行多个Rails控制器操作?

Ruby on rails 是否可以在一个HTTP请求中运行多个Rails控制器操作?,ruby-on-rails,Ruby On Rails,我正在为需要有意义的特定错误的客户端构建JSON API。对于涉及单一资源类型的端点,一切都进展顺利,但对于涉及多个资源类型的请求,我们面临着挑战(如果一个请求涉及多个资源类型,则所有操作都将失败) 我们正在考虑的一个想法是让客户端提交一个类似于单个资源请求的操作数组,并返回一个包含每个请求响应的数组。然后,我们可以将所有调用包装在一个事务中,并在资源无法保存时回滚 请求可能如下所示: { "operations": [ { "path": "/orders",

我正在为需要有意义的特定错误的客户端构建JSON API。对于涉及单一资源类型的端点,一切都进展顺利,但对于涉及多个资源类型的请求,我们面临着挑战(如果一个请求涉及多个资源类型,则所有操作都将失败)

我们正在考虑的一个想法是让客户端提交一个类似于单个资源请求的操作数组,并返回一个包含每个请求响应的数组。然后,我们可以将所有调用包装在一个事务中,并在资源无法保存时回滚

请求可能如下所示:

{
  "operations": [
     {
       "path": "/orders",
       "action": "POST",
       "data": {
         "client_id": 1
       }
     },
     {
       "path": "/charges",
       "action": "POST",
       "data": {
         "amount": 300,
       },
       "relationships": {
         "order": {
           "id": {
             "pointer": { "/operations/0/data" }
           }
         }
       }
     }
  ]
}
答案可能是这样的:

{
  "operations": [
    {
      "status": "201",
      "data": {}
    },
    {
      "status": "400",
      "errors": [...]
    }
  ]
}
因此,我想知道端点是否可以在事务中以编程方式调用现有的关联操作(例如,OrdersController#create和ChargesController#create),收集其呈现的响应,并将这些响应作为数组呈现回客户端

在我看来,挑战似乎是:

  • 解析控制器操作的路径
  • 在每个操作中包含正确的参数

任何帮助都是非常感谢的——即使帮助是“你为什么要这样做?!?还是这样做吧!”谢谢

这听起来是个非常糟糕的主意,因为它违背了Rails(以及HTTP)的设计使用方式。尝试将逻辑从控制器移动到可重用服务中,这些服务可以从任何控制器操作调用,包装在事务中,并以任何方式处理错误。

我想可能就是这种情况。我一直在使用来自控制器的PORO“服务”,但我希望有一些相对简单的方法来创建一个相对抽象的服务,以重用现有的单资源端点。谢谢你的回复!