Web API 速率限制(四)- 其它和AspNetCoreRateLimit
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Web API 速率限制(四)- 其它和AspNetCoreRateLimit相关的知识,希望对你有一定的参考价值。
参考技术A
返回的状态码
其它开发者调用限速系统的API时,如果超过了配额,也就是请求被拒绝,那么这时应该返回429状态码,表示用户在某段时间内发送的请求过多 。通常标准的做法还会设置 retry-after 这个header,来告诉API调用者多久以后可以重试请求。
例子
HTTP/2 429
Date: Sun, 17 Jun 2018 14:43:38 GMT
retry-after: 36
自定义响应Header
除了返回状态码,还应该返回一些自定义的header来解释速率限制的情况,这会对调用API的开发者有用。这些常用的Headers包括:
例子
HTTP/1.1 200 OK
Date: Sat, 11 Nov 2017 04:37:22 GMT
Status: 200 OK
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 59
X-RateLimit-Reset: 1510378642
AspNetCoreRateLimit
AspNetCoreRateLimit,它是ASP.NET Core速率限制中间件,地址是:
https://github.com/stefanprodan/AspNetCoreRateLimit
使用简介
首先在Startup的ConfigureServices里面注册,用到了MemoryCache:
这里配置的是IP限制,它允许有很多规则,这里我只用了一个:针对所有的资源,每5分钟最多3次请求。
现在,我需要注册一个策略存储和速率限制计数器的存储,这两个是被中间件使用。所以还需要注册这两个服务:
这里都使用的是Singleton单例,因为我们需要的是针对全局的请求来做操作。
接下来要在管道里添加中间件,它应该放在靠前的位置,在日志和异常之后:
测试,发送一个请求看结果:
可以看到5分钟内还剩下两次请求的配额。限制重置的时间大约在5分钟之后。
发送请求超限之后,就会返回429:
Retry-After提示了再过294秒后可以再试试。
而响应的body是这样提示的:
我们再组合几个其它的规则:
现在允许5分钟10次请求,但是每10秒钟最多只能有两次请求。
第一次请求后:
5分钟内还剩9次,然后我10秒内连续发送两次请求,然后再发送一次请求:
这时超出了限制,Header里:
提示6秒后可以重试, 6秒后再次发送请求:
以上是关于Web API 速率限制(四)- 其它和AspNetCoreRateLimit的主要内容,如果未能解决你的问题,请参考以下文章
如何将 Twitter API 用于超过 REST 速率限制的大型 Web 应用程序
Yii2框架RESTful API教程 - 格式化响应,授权认证和速率限制