KISS and DRY API 设计

KISS and DRY API design

我需要创建一个类似于页面的仪表板。这不是太复杂。可以将其想象成一个页面,其中包含一个时间线图表、几个数字和几个网格,something like this

我的数据已经有了一个通用的 CRUD rest API。

我是否应该专门为此页面创建 API 方法,例如 getDashboardData 等,或者只调用许多相关的 crud API 方法并处理 frontend/page?

从创建简单且易于管理的软件架构 (DRY/KISS) 的角度来看,您会推荐什么方法,而不是专门出于 performance/security 原因?

简答:我会做专门的报道API。

长答案(为什么):

一般来说,系统/解决方案设计认识到交易 behavior/objectives 和分析 behavior/objectives 之间的差异。要通过数据镜头了解这一点,请查看 OLTP vs OLAP

您似乎已经认识到(或至少怀疑),您可以使用现有的 CRUD API,但它们不是理想的选择,因为它们以您想要的事务为导向跨许多事务/记录进行报告 - 您最终将不得不发出大量请求,这会给您的 API 以及它们连接到的任何系统带来不必要的负载。

因为它们是专门构建的,所以专门的报告 API 应该更好,因为:

  • 它们提供了以您需要的方式获取所需数据的最佳机会。它们的设计方式将使其易于调用和处理返回的数据。
  • 他们的实现可以考虑底层数据/系统,尽量减少对源系统的影响。例如,在“严重”场景中,您可能决定缓存数据副本以用于报告目的,这样任何“繁重”的报告查询都不会影响操作性能。您还可以更改数据结构,使其更适合报告。
  • 拥有专门的报告 API 意味着您可以选择将 API 暴露给谁而不是其他人,应用不同级别的安全性等。
  • 拥有专门的报告 API 为您的解决方案增加了一些复杂性和额外的代码,但提供了更清晰的结构,应该更易于维护。