例如,对于服务 REST API,http://service_host/stores/count=30
将返回从 DB 中提取的 30 个存储。
如果有人输入count=99999999,服务将花费相当长的时间来返回所有商店。我应该限制服务端的计数参数吗?或者我应该让客户执行他们需要的任何限制吗?
此外,在服务端实现此计数参数(如有效类型、正值等)的验证是否更好?我倾向于使服务强大而安全,但不愿过多地检查它。
这里有什么设计惯例要遵循吗?
作为一般规则,不要依赖客户表现得很好。始终在服务器端保护自己。验证类型,强制参数限制,检查无效输入。否则客户端可能会无意中使您的整个系统瘫痪(更不用说恶意攻击了)。
您应该对服务端的参数进行限制,以便您的服务可靠,但同时您应该为客户端提供一个选项,以通过单独的请求获取更多项目。这通常通过接受 2 个参数来完成 -offset
和count
. 偏移量是要返回的第一个项目的位置和计数 - 项目的数量,从offset
要返回的开始。
一般来说——不要让客户滥用你的服务。在服务中实施有意义的限制,使其可靠并让客户端完成繁重的工作(创建和发送多个请求)。同时支持那些多个请求和文档,特别是如果该服务将由 3rd 方开发人员使用。