我需要跟踪实体 View 计数。例如,我有一个 Product
实体并具有以下 API 端点:
GET /products/{productID}
如果我想跟踪特定 Product
的观看次数,我应该添加额外的逻辑来增加观看次数,当我调用此 /products/{productID}
端点?或者我应该为此引入一个单独的端点?
已更新
也许我的问题不清楚,但我的问题是关于使用 REST API 更新计数器的最佳实践,而不是关于多层架构。我想问以下问题 - 我应该通过提到的 GET
请求更新计数器还是应该引入另一个 API.. 让我们说 POST/products/{productID}/viewings
并在 GET
之后调用它以更新计数器?
最佳答案
观看次数是产品实体的属性还是元数据?
如果观看次数是一个属性,则考虑单独的 PUT
或 PATCH
请求来更新它。
GET
是一个 safe method并且不应更新所请求的资源。如果客户端预取和/或缓存那个本应安全的请求的结果,那么您的观看次数就会不正确。
要问自己的另一个问题是查看计数是否与该资源的 GET
请求同义。换句话说,您的应用可能出于用户 View 以外的原因对资源执行 GET
。如果是这样,那将是在单独的非安全请求中增加观看次数的另一个原因。
如果 View 计数确实是元数据并且 GET
确实等同于用户 View ,那么我会继续增加 GET
上的计数器。一个单独的请求是有成本的,而且对于每个安全请求,服务器上可能会发生其他无害的副作用(例如日志记录)。
关于Spring Rest Controller 跟踪实体 View 计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46450894/