具有聚合属性

时间:2018-03-09 01:00:39

标签: rest aggregate api-design endpoint

我们目前正在尝试提供一套适合我们资源模型的REST API。

资源的简化示例是:

CompanyInfo: {
   totalNumberOfEmployees: Number,
   employees: [...employees],
}

Employee: {
   name: String,
}

在这种情况下,“CompanyInfo”就像DB中不存在的虚拟资源。它是获取与公司资源相关的所有数据的捷径。我们的想法是减少FE上的逻辑数量,并创建更方便的端点。

我们目前的终端设计是:

   GET /api/companyInfos/{companyId}/employees

   GET,POST,PUT,DELETE /api/companyInfos/{companyId}/employees/{employeeId}

额外{companyId}的原因是因为这些端点不返回“Employees”,而是返回包含有效负载中嵌入的“Employees”的“CompanyInfo”。

这是为了避免在我们调用POST创建新的“Employee”时,在同步情况下不会更新聚合属性“totalNumberOfEmployees”

所以我的问题是:

  • 这是解决“请求太多”或“FE中逻辑过多”问题的正确方法吗?

  • 端点是否可以返回与其网址描述完全不同的资源?

非常感谢:)

1 个答案:

答案 0 :(得分:1)

对于你的拳头问题

这是解决问题的正确方法吗?太多请求"或者" FE"中的逻辑太多了?

是有时这就是假设要做的事情。当每个请求中发送的数据很小时。对许多请求不影响性能所以这就是假设要做的事情。

通常建议在前端编写一个单片Ajax调用,它可以进行任何类型的调用,将回调作为参数,方法,参数作为参数。

因此,如果您遵循这种方法,那将不会有太多逻辑。所有你必须编写的是每个Ajax调用的回调。有时情况可能不允许此示例:如果您使用的内容类型类似于' multipart / mixed' 你必须写另一个ajax调用代码

然而现在大多数前端都基于交互式网站的逻辑过多。所以你最关心的应该是关于网站的外观。

对于你的第二个问题

端点是否可以返回与其URL描述完全不同的资源?

是的它是可以接受的 。但建议客户端提及它在Accept标头中所需的所有MIME类型,并且Api只应返回那些MIME类型。