更好的是,单个端点但有多个数据库查询,或者具有单个数据库查询的多个端点

时间:2019-12-18 02:48:52

标签: mysql node.js express redux

当我的应用加载时,我将从服务器(快速)获取数据并将结果放入redux(我的全局状态)。我现在拥有的是这样的多个端点:

  • api / get / hmo
  • api / get / groups
  • api / get / items
  • api / get / papers

每个都有一个正常的select db查询。

如果我将其设为单个端点并进行多次选择并将其一次全部返回给客户端,是否会有不利之处:

  • api / get / allData

在我的控制器内类似:

const hmo = Select * from hmo;
const groups = Select * from groups;
const items = Select * from items;
const papers = Select * from papers;

return res.send(200).json({
   hmo,
   groups,
   items,
   papers
})

什么是最佳实践?两者之间比较快?

2 个答案:

答案 0 :(得分:0)

更快

让我们计算每种解决方案中的资源消耗。
enter image description here 看来solution 2消耗的资源更少,并且比解决方案1更快。解决方案2保存了一些HTTP连接和数据库连接。

最佳做法

,但这可能不是最佳实践。因为效率不是设计(或开发)应用程序时应该考虑的唯一问题。这是给你的一些例子。

  • 访问您网站的用户将在解决方案1中快速获得第一数据(例如:hmo)。您所请求的4个数据可能并不那么重要。
  • 如果您将它们分开,您的api将可在其他模块或客户端(例如移动应用程序)中重用。

因此要视情况而定,在设计api时,您应该考虑的问题不止faster

答案 1 :(得分:0)

两者都做,让客户选择最适合他们的东西。

最佳实践是拥有简单的,细粒度的API。您需要/想要的数量。

多合一API是一个细粒度的 facade ,它是一个将细粒度的分组的薄层。

理想情况下,外观不是细粒度服务器API的一部分,而是存在于本地服务器上。这是因为外观往往会发生变化,例如您可以向组中添加另一个细粒度的API或添加查询参数等,但是细粒度的API既简单又趋于稳定,因此您仅部署变化的内容。而且,它们不需要全部放在同一台服务器上以使外观进行分组(实际上,您可以通过将每个细粒度的API放在自己的服务器上来分配处理负载来提高性能)。 / p>

就您而言,您可以将它们全部放在同一台服务器上,然后查看其运行情况。如果运行良好,则始终可以将其雕刻到新的外观服务器中。