目录
一、前言
本文主要对 FastAPI 与 Flask 框架进行对比,以助快速学习。进一步了解FastAPI的高级使用方法,可参考FastAPI官方文档。如果对你有帮助,欢迎三连 收藏点赞关注!!!
Flask作为Python语言中的老牌Web框架,已经被应用于大量的Python Web开发项目,其使用简洁,支持工具众多,工具丰富,社区活跃,是Python Web框架中的佼佼者之一。而近来,FastAPI的出众表现,已使得其越来越受到众多开发者的关注,成为Web开发主流框架之一。---- NickYoung
二、FastAPI 优势
- 高效运行:可与 NodeJS 和 Go 并肩的极高性能(归功于 Starlette 和 Pydantic)。史称最快的 Python web 框架之一。
- 高效编码:提高功能开发速度约 200% 至 300%。
- 更少 bug:减少约 40% 的人为(开发者)导致错误。
- 直观易用:支持强大的编辑器功能、自动补全和更少的调试时间。
- 简单易学:设计的易于使用和学习,阅读文档的时间更短。
- 降低冗余:使代码重复最小化。通过不同的参数声明实现丰富功能。
- 健壮可靠:生产可用级别的代码。还有自动生成的交互式文档。
- 标准化:基于(并完全兼容)API 的相关开放标准:OpenAPI (以前被称为 Swagger) 和 JSON Schema。
下面将会结合Flask的使用作为对比,来介绍FastAPI,作为FastAPI的入门教程。
本文使用的两个Web框架版本如下:
fastapi==0.101.1
Flask==2.3.3
三、Hello World
- Flask 代码
from flask import Flask
app = Flask(__name__)
@app.route('/')
def home():
return 'hello world'
if __name__ == '__main__':
app.run()
- FastAPI 代码
import uvicorn
from fastapi import FastAPI
app = FastAPI()
@app.get('/')
def home():
return 'hello world'
if __name__ == '__main__':
uvicorn.run(app)
两者的代码差别不多,运行时Flask的默认端口为5000,FastAPI的端口为8000,使用curl命令请求(FastAPI),返回结果如下:
$ curl localhost:8000/
"hello world"
在部署生产代码时,Flask使用gunicorn,示例命令如下:
gunicorn app:app
而FastAPI使用uvicorn,示例命令如下:
uvicorn app:app
当然,在实际部署时还可指定端口(port)、worker数量、最大连接数等,本文不再详述。
四、HTTP 方法
常见的HTTP请求方法有GET, POST, PUT, PATCH, DELETE等。
以POST方法为例
- Flask 代码
@app.route('/', methods=['POST'])
def example():
...
- FastAPI 代码
@app.post('/')
def example():
...
其它HTTP请求方法的使用方法如下:
@app.get('/')
@app.put('/')
@app.patch('/')
@app.delete('/')
五、URL 变量
我们想从URL中获取user id,比如/users/1,然后将user id返回给用户。
- Flask 代码
@app.route('/users/<int:user_id>')
def get_user_details(user_id):
return {
'user_id': user_id}
- FastAPI 代码
@app.get('/users/{user_id}')
def get_user_details(user_id: int)