为什么速率限制逻辑应该放在应用程序代码而不是 Web 服务器
why rate limiting logic should be placed with application code rather then web server
我正在探索将速率限制功能放在使用 spring 引导开发的 rest API 上。
在阅读了很多文章之后,我了解到,最好的方式是使用应用程序代码来实现速率限制功能,而不是将其放在 Web 服务器上。
我的问题是您如何决定哪些功能应该放在哪里。因为它监视您的来电并且与业务逻辑无关,所以理想的地方应该是网络服务器。
您可以使用过滤器将此功能与您的业务逻辑分开。
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 应该会让您感兴趣。
我正在探索将速率限制功能放在使用 spring 引导开发的 rest API 上。
在阅读了很多文章之后,我了解到,最好的方式是使用应用程序代码来实现速率限制功能,而不是将其放在 Web 服务器上。
我的问题是您如何决定哪些功能应该放在哪里。因为它监视您的来电并且与业务逻辑无关,所以理想的地方应该是网络服务器。
您可以使用过滤器将此功能与您的业务逻辑分开。
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 应该会让您感兴趣。