使用slowapi对FastApi的接口进行限速-slowapi

1、前言

前面,我们已经介绍过使用Redis来对FastApi的接口进行限速。但实际中,有很多种方式都可以对FastApi接口进行限速,今天我们就一起来学习如何使用slowapi对接口进行限速。

2、快速开始

slowapi仍然处于alpha阶段。

slowapi的计数器默认保存在内存中。

slowapi是从flask-limiter修改而来。

2.1、安装

pip install slowapi

2.2、demo

from fastapi import FastAPI
from fastapi.requests import Request

from slowapi.errors import RateLimitExceeded
from slowapi import Limiter, _rate_limit_exceeded_handler
from slowapi.util import get_remote_address

import uvicorn

app = FastAPI()

# 实例化一个limiter对象,根据客户端地址进行限速
limiter = Limiter(key_func=get_remote_address)
# 指定FastApi的限速器为limiter
app.state.limiter = limiter
# 指定FastApi的异常拦截器
app.add_exception_handler(RateLimitExceeded, _rate_limit_exceeded_handler)

@app.get("/")
@limiter.limit("5/minute")
async def index(request: Request):  # 注意,这里的request必须得带,这是slowapi已知的问题,如果没有request,slowapi将无法拦截限速。
    return "welcome baby!"

在视图函数中,request参数必须得带,这是slowapi已知的问题,如果没有request,slowapi将无法拦截限速。

以上代码的限速规则@limiter.limit("5/minute")含义为:每分钟限制访问5次。

测试过程:

  15/06/2022   19:12.28   /home/mobaxterm  date && curl localhost:8000
Wed Jun 15 18:12:54     2022
"welcome baby!"                                                                                                                                        ✔

  15/06/2022   19:12.55   /home/mobaxterm  date && curl localhost:8000
Wed Jun 15 18:12:58     2022
"welcome baby!"                                                                                                                                        ✔

  15/06/2022   19:12.58   /home/mobaxterm  date && curl localhost:8000
Wed Jun 15 18:13:00     2022
"welcome baby!"                                                                                                                                        ✔

  15/06/2022   19:13.01   /home/mobaxterm  date && curl localhost:8000
Wed Jun 15 18:13:02     2022
"welcome baby!"                                                                                                                                        ✔

  15/06/2022   19:13.03   /home/mobaxterm  date && curl localhost:8000
Wed Jun 15 18:13:04     2022
"welcome baby!"                                                                                                                                        ✔

  15/06/2022   19:13.05   /home/mobaxterm  date && curl localhost:8000
Wed Jun 15 18:13:07     2022
{"error":"Rate limit exceeded: 5 per 1 minute"}  

以上,当在对接口进行5次调用后,limiter已经进行接口访问限制,并且返回了友好的提示。

而且后端日志也有比较清晰的提示。

INFO:  127.0.0.1:63299 - "GET / HTTP/1.1" 429 Too Many Requests

不得不说,slowapi非常不戳。

我的博客即将同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=3pasgjkn988c

版权声明:除特殊说明,博客文章均为phyger原创,依据CC BY-SA 4.0许可证进行授权,转载请附上出处链接及本声明。来自:https://u1s1.vip/archives/212
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇