可以在一个HTTP请求中运行多个Rails控制器操作吗?

时间:2016-03-27 17:13:56

标签: ruby-on-rails

我正在为需要有意义的特定错误的客户端构建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),收集它们呈现的响应,并将这些响应呈现为阵列回到客户端。

在我看来,挑战似乎是:

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

非常感谢任何帮助 - 即使有帮助的是“你为什么要这样做?!?请这样做!”谢谢!

1 个答案:

答案 0 :(得分:1)

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