Postgresql RESTAPI-急切加载嵌套资源

Postgresql RESTAPI-急切加载嵌套资源,postgresql,api,rest,Postgresql,Api,Rest,我想知道我是否正确地渴望在API中加载嵌套资源 在我的应用程序中,公司可以拥有许多技术,以及工具。该关系存储在联接表companys\u technologies和companys\u tools中 在端点/companys,我想返回所有公司及其技术和工具,如下所示: [ { company_name: 'company_1', ... technologies: [ {...}, ..., {...} ], too

我想知道我是否正确地渴望在API中加载嵌套资源

在我的应用程序中,
公司
可以拥有许多
技术
,以及
工具
。该关系存储在联接表
companys\u technologies
companys\u tools

在端点
/companys
,我想返回所有
公司
及其
技术
工具
,如下所示:

[
  {
    company_name: 'company_1',
    ...
    technologies: [
      {...},
      ...,
      {...}
    ],
    tools: [
      {...},
      ...,
      {...}
    ]
  },
  ..., 
  {
    company_name: 'company_n',
    ...
  }
]
为了返回30家公司,我最终做了61个查询

  • 一个查询最多可获得30家公司(1个查询
  • 通过这些公司来获取每一家公司的技术。(30个查询
  • 通过公司循环,为每个公司获取工具。(30个查询
然后我构建响应并将其发送回客户端


即使所有外键上都有索引,响应时间也非常高。在我的API设计中,进行这么多查询是不可避免的,还是有其他方法?

要简单地进行这三个查询,您可以查询所有公司,然后是公司与技术的连接,然后是公司与工具的连接。然后对每一个进行一次迭代以构建响应。我的SQL有点生疏,但我相信它可以在1个查询中完成。但是3比n*2+1好得多。在同一步骤中检索技术和工具是强制性的吗?或者,你可以有一个指向它们的链接,只在向下钻取时执行一个目标查询,非常简单地进行这三个查询,你可以查询所有公司,然后是公司到技术的链接,然后是公司到工具的链接。然后对每一个进行一次迭代以构建响应。我的SQL有点生疏,但我相信它可以在1个查询中完成。但是3比n*2+1好得多。在同一步骤中检索技术和工具是强制性的吗?或者,您可以使用一个指向它们的命令,并仅在向下钻取时执行目标查询