RESTful API限流
限流:使用X-RateLimit-*
HTTP头部和429
状态码
当您的API广泛被应用程序和用户使用时,限流变得很有必要。
达到限流后,您的API应该返回以下HTTP状态代码:
429 Too Many Requests
但是不幸的是,HTTP标头没有标准名称,您可以使用该标准标头将限流告知用户:
Twitter使用以下标头:
X-Rate-Limit-Limit
- 该endpoint上限流的上限X-Rate-Limit-Remaining
- 15分钟中剩余的请求次数X-Rate-Limit-Reset
- 以UTC秒为单位,限流重置之前的剩余时间
Github使用以下标头:
X-RateLimit-Limit
- 每小时允许您发出的最大请求数。X-RateLimit-Remaining
- 当前限流中剩余的请求次数。X-RateLimit-Reset
- 以UTC秒为单位,当前限流的重置时间。
但是,使用Github的标准似乎比使用Twitter的标准的RESTful API框架更多,这就是为什么我建议您使用Github的HTTP标头进行限流(即X-RateLimit-Limit
,X-RateLimit-Remaining
and X-RateLimit-Reset
),只有一个例外。
不要使用Github的标准X-RateLimit-Reset
标头。您可以保留相同的标头名称,但不要在此标头的值中显示时间戳,而应显示限流重置之前剩余的秒数。
为什么 ?因为HTTP规范指出日期格式应使用RFC 1123(即:星期五,2018年3月9日08:50:15 GMT)。因此,如果要在X-RateLimit-Reset
标头中显示日期,则应使用此格式而不是时间戳,但是使用剩余秒数更为实用。