前言
来啦老铁!
许久不见,甚是想念~
最近偶然看到一个 python web 框架,刚好又需要搭建一个后端,因此就打算练练手,顺便记录一下,它就是:
- FastAPI
学习路径
- 认识 FastAPI;
- FastAPI 与 Flask 对比;
- 安装 FastAPI;
- 运行第一个 FastAPI 应用;
- API 文档;
- APIRouter;
- 启动 server 指定端口;
1. 认识 FastAPI;
FastAPI 是一个用于构建 API 的现代、快速(高性能)的 web 框架,专为在 Python 中构建 RESTful API 而设计。。
FastAPI 使用 Python 3.8+ 并基于标准的 Python 类型提示。
FastAPI 建立在 Starlette 和 Pydantic 之上,利用类型提示进行数据处理,并自动生成API文档。
FastAPI 于 2018 年 12 月 5 日发布第一版本,以其易用性、速度和稳健性在开发者中间迅速流行起来。
FastAPI 支持异步编程,可在生产环境中运行。
【以上,引用自网络文章】
2. FastAPI 与 Flask 对比;
FastAPI 是一个现代化的 Python web 框架,它提供了高性能和易用性。与之相比,Flask 是一个轻量级的 Python web 框架,也是非常受欢迎的。
以下是 FastAPI 与 Flask 的一些对比:
性能:FastAPI 比 Flask 更快。它使用了基于类型的请求参数验证和响应模型,以及异步请求处理,从而提供了更好的性能。
类型提示:FastAPI 支持使用 Python 的类型提示来定义请求参数和响应模型,这使得代码更加清晰和易于维护。而 Flask 则需要使用额外的库来实现类似的功能。
异步支持:FastAPI 支持异步请求处理,这意味着它可以处理更多的并发请求,从而提高性能。而 Flask 在处理异步请求方面相对较弱。
文档生成:FastAPI 自带了自动生成 API 文档的功能,可以通过访问特定的 URL 来查看 API 文档。而 Flask 需要使用额外的库来实现类似的功能。
生态系统:Flask 有一个庞大的生态系统,拥有大量的第三方扩展和插件。而 FastAPI 相对较新,生态系统相对较小,但在不断增长。
总的来说,FastAPI 是一个更现代化和高性能的框架,特别适合构建高性能的 API 服务。而 Flask 则更适合构建小型的 web 应用和快速原型开发。选择哪个框架取决于项目的需求和开发团队的偏好。
【以上,引用自 AI 的回复,看着还挺靠谱】
3. 安装 FastAPI;
- 安装 fastapi 包;
pip install fastapi
- 另外我们还需要一个 ASGI 服务器,生产环境可以使用 Uvicorn 或者 Hypercorn:
(实际上,安装 fastapi 时已经默认安装了,如果没有,再安装也不迟)
pip install "uvicorn[standard]"
4. 运行第一个 FastAPI 应用;
- 例如,在项目中创建一个文件 main.py,并写入代码:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
- 启动应用;
uvicorn main:app --reload
启动应用
其中:main 为文件名,--reload 代表热启动,即有代码变更时会自动重启服务,生产肯定是不能用这个参数的。
- 调用接口;
- 浏览器打开 url 进行接口 get 调用:
5. API 文档;
FastAPI 已经帮我们集成好了 Swagger,我们可以直接在浏览器访问以下 url 以访问 Swagger UI:
Swagger UI还挺方便的,不用像其他有些框架如 Flask 需要自己集成这一部分。
Swagger 此处就不做介绍了~
6. APIRouter;
实际场景中,我们不可能把所有接口都在 main.py 里头声明,即不可能所有的接口都放在一个文件中进行管理,就像 SpringBoot 中,我们会编写多个 controller 一样。
此时需要用到 FastAPI 的 router 进行管理,步骤演示如下:
a. 项目下创建文件夹,如 router;
b. 在 router 下创建多个 .py 文件,例如创建 product.py 和 user.py 进行演示;
c. 编写 product.py 和 user.py,分别声明接口,例如:
product.py
from fastapi import APIRouter
router = APIRouter(
prefix='/product',
tags=['router for product']
)
@router.get("/info")
def get_product_info():
return {
"name": "product 1",
"stock": 100
}
user.py
from fastapi import APIRouter
router = APIRouter(
prefix='/user',
tags=['router for user']
)
@router.get("/info")
def get_product_info():
return {
"name": "dylan zhang",
"age": 18
}
d. 修改 main.py,主要将接口声明改为引用自上述 router,例如:
from fastapi import FastAPI
from routers import product, user
app = FastAPI()
@app.get("/", summary="ping", deprecated=False)
async def ping():
return "success"
app.include_router(product.router)
app.include_router(user.router)
e. 保存后,接口文档变为:
接口文档f. 此时,我们可以访问通过 router 声明的接口了,例如:
接口 1 接口 27. 启动 server 指定端口;
有时候我们需要指定端口启动 server,这时候我们可以类似这么做:
uvicorn main:app --port 8001 --reload
如上,我们在 8001 端口启动了我们的 server。
uvicorn 更多可用参数,可以使用以下命令进行查阅:
uvicorn --help
关于 FastAPI 更多内容,我们可以参考其他教程。
FastAPI 更多内容包含:
- GET 请求参数;
- POST/PUT 请求;
- FastAPI Pydantic 模型;
- FastAPI 路径操作依赖项;
- 等~
这些网上已经有很多教程了,当前,请读者自行脑补~
今天就到这吧,能力有限,欢迎指正、互相交流,感谢~
如果本文对您有帮助,麻烦点赞、关注!
感谢~
网友评论