我们目前正在尝试提供一套适合我们资源模型的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中逻辑过多”问题的正确方法吗?
端点是否可以返回与其网址描述完全不同的资源?
非常感谢:)
答案 0 :(得分:1)
对于你的拳头问题
这是解决问题的正确方法吗?太多请求"或者" FE"中的逻辑太多了?
是有时这就是假设要做的事情。当每个请求中发送的数据很小时。对许多请求不影响性能所以这就是假设要做的事情。
通常建议在前端编写一个单片Ajax调用,它可以进行任何类型的调用,将回调作为参数,方法,参数作为参数。
因此,如果您遵循这种方法,那将不会有太多逻辑。所有你必须编写的是每个Ajax调用的回调。有时情况可能不允许此示例:如果您使用的内容类型类似于' multipart / mixed' 你必须写另一个ajax调用代码
然而现在大多数前端都基于交互式网站的逻辑过多。所以你最关心的应该是关于网站的外观。
对于你的第二个问题
端点是否可以返回与其URL描述完全不同的资源?
是的它是可以接受的 。但建议客户端提及它在Accept标头中所需的所有MIME类型,并且Api只应返回那些MIME类型。