为什么速率限制逻辑应该放在应用程序代码而不是 Web 服务器

why rate limiting logic should be placed with application code rather then web server

我正在探索将速率限制功能放在使用 spring 引导开发的 rest API 上。

在阅读了很多文章之后,我了解到,最好的方式是使用应用程序代码来实现速率限制功能,而不是将其放在 Web 服务器上。

我的问题是您如何决定哪些功能应该放在哪里。因为它监视您的来电并且与业务逻辑无关,所以理想的地方应该是网络服务器。

您可以使用过滤器将此功能与您的业务逻辑分开。

https://www.baeldung.com/spring-boot-add-filter

我推荐spring-cloud-gateway's rate limiter

My question is how do you decide that which functionality should go where. Since, its monitoring your incoming calls and nothing to do with business logic, the ideal place should be a web server.

从技术上讲,网络服务器可以完成这项工作,但实际上,网络服务器不一定拥有所有需要的信息,它并不专门用于 API 消费,它也可能使这个的可测试性功能更难。

Web 服务器端可能不是一个好的选择的一些实际原因:

  • 开发人员不一定在本地配置HTTP Web 服务器。
  • 您想编写单元和集成测试来检查速率限制是否按规定应用。在您的 Java 应用程序范围内创建用于自动化测试的配置比使用在 Web 服务器上定义的配置文件要简单得多。
  • Web 服务器的原因是 HTTP 请求-响应,而不是服务。 可以根据 IP 应用速率限制,但不仅如此,用户名、用户角色、服务类型可能会影响限制。不确定您能否从 HTTP 服务器轻松获得所有这些。
    例如,角色存储在服务器端或数据库中。

更好的选择是通过添加特定的和专门的 类 或配置文件来设置这些机制,这简化了它们的阅读、维护和可测试性。
正如您在标签中提到的 Spring Boot,that and that 应该会让您感兴趣。