Spring Rest Controller 跟踪实体 View 计数

标签 spring rest spring-mvc spring-restcontroller

我需要跟踪实体 View 计数。例如,我有一个 Product 实体并具有以下 API 端点:

GET /products/{productID} 

如果我想跟踪特定 Product 的观看次数,我应该添加额外的逻辑来增加观看次数,当我调用此 /products/{productID}端点?或者我应该为此引入一个单独的端点?

已更新

也许我的问题不清楚,但我的问题是关于使用 REST API 更新计数器的最佳实践,而不是关于多层架构。我想问以下问题 - 我应该通过提到的 GET 请求更新计数器还是应该引入另一个 API.. 让我们说 POST/products/{productID}/viewings 并在 GET 之后调用它以更新计数器?

最佳答案

观看次数是产品实体的属性还是元数据

如果观看次数是一个属性,则考虑单独的 PUTPATCH 请求来更新它。

GET 是一个 safe method并且不应更新所请求的资源。如果客户端预取和/或缓存那个本应安全的请求的结果,那么您的观看次数就会不正确。

要问自己的另一个问题是查看计数是否与该资源的 GET 请求同义。换句话说,您的应用可能出于用户 View 以外的原因对资源执行 GET。如果是这样,那将是在单独的非安全请求中增加观看次数的另一个原因。

如果 View 计数确实是元数据并且 GET 确实等同于用户 View ,那么我会继续增加 GET 上的计数器。一个单独的请求是有成本的,而且对于每个安全请求,服务器上可能会发生其他无害的副作用(例如日志记录)。

关于Spring Rest Controller 跟踪实体 View 计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46450894/

相关文章:

rest - curl 重试机制

java - 如何在 Spring MVC 中检索 ErrorField 的错误消息

java - spring jpa每分钟运行一个任务但HikariPool关闭

java - 在 spring boot 应用程序中使用默认和自定义 liquibase 配置

java - GET 请求正文中的 RESTful Web 服务和 JSON 文档

java - 基于 Jersey Moxy 的休息服务不消耗嵌套 json post 请求负载

java - Spring 的 Bean 列表

Java Spring MVC + Jetty Websocket 不兼容的方法签名

java - "getOutputStream() has already been called for this response"会导致服务器崩溃吗?

java - 将 WebTestClient.BodyContentSpec 转换为 JSON 对象