【问题标题】:What is better, single endpoint but multiple db query or multiple endpoint with single db query更好的是,单端点但多数据库查询或多端点单数据库查询
【发布时间】:2020-01-02 14:34:49
【问题描述】:

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

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

每个都有一个普通的选择数据库查询。

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

  • 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
})

最佳实践是什么,两者哪个更快?

【问题讨论】:

    标签: mysql node.js express redux


    【解决方案1】:

    为了更快

    让我们计算每个解决方案的资源消耗。
    看来solution 2 消耗的资源更少,而且比方案1 更快。方案2 节省了一些http 连接和db 连接。

    最佳实践

    但这可能不是最佳做法。因为在设计(或开发)应用程序时,效率并不是我们应该考虑的唯一因素。这里有一些例子供你参考。

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

    所以这取决于,你应该考虑更多 faster 来设计你的 api。

    【讨论】:

      【解决方案2】:

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

      最佳做法是拥有简单、细粒度的 API;您需要/想要的数量。

      一体化 API 是一个粗粒度的facade,它是一个将细粒度组合在一起的薄层。

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

      在您的情况下,您可以将它们全部放在同一台服务器上,然后看看效果如何。如果它运行良好,您可以随时将其拆分为新的外观服务器。

      【讨论】:

        猜你喜欢
        • 2023-03-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-23
        • 2012-12-21
        • 2015-04-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多