FastAPI框架和路由的解析
一、FastAPI框架
1.FastAPI的优势
FastAPI在性能方面效率极高,测试表明其性能指标可以和Go和Node.js等高性能语言的框架处于同一水平。同时他运行速度也是很快的,它允许框架充分利用async和await关键字实现异步I/O,从而合理的防止cpu资源的浪费。
2、FastAPI的三大基石: Starlette,Pydantic,Uvicorn
FastAPI并非独立的巨大框架,而是 Starlette和Pydantic这俩大高性能库的继承与封装,并使用Uvicorn作为其运行容器。
Starlette:基石
FastAPI本身就是Starlette的一个子类,它继承了Starlette的所有核心ASGI特性。Starlette所提供的底层能力,保证了FastAPI能够在一个高度并发的环境中稳定运行。
Pydantic :数据验证与类型转换
Pydantic是 FastAPI处理数据的核心引擎。它负责根据Python类型提示,实现输入数据的自动验证(Validation)、类型强制转换(Coercion)和序列化(Serialization)。通过定义继承自 pydantic.BaseModel 的类,Pydantic确保了进入应用业务逻辑的数据是有效且符合预期的
Uvicorn:ASGl服务器
Uvicorn是用于运行FastAPI应用程序的高性能 ASGI 服务器。在开发过程中,通常使用 fastapi dev main.py 或 uvicorn main:app --reload 命令启动服务。然而,在架构考量上,必须区分开发环境和生产环境的服务器配置。
二、路由(协议 +域名+端口号+请求资源)
web路由指的就是用户把用户请求的URL映射大后端对应的处理逻辑(函数/方法/控制器)的过程。
示例:http://127.0.0.1:8000/hello/python,这里就是http(协议)+127.0.0.1(域名)
+端口号(8000)+请求资源(hello/python)
FastAPI的路由定义基于 Python 的装饰器模式,使用 @app.get(), @app.post() 等装饰器将 HTTP 方法与特定的路径操作函数关联起来。 @app.get("路径")
不同的HTTP方法有着不同的语义
- GET 方法用于请求数据的检索 ,例如在网站查找自己的历史记录
@app.get(); - POST 方法则用于提交新数据,通常是为了创建新的资源,例如用户在web上创建网页用户
@app.post(); - PUT、DELETE 和 PATCH 则分别用于资源的完全替换、删除或部分更新,例如对个人信息的更改
@app.put()。 - 在设计API的时候,必须提前考虑web前端需要做的是什么。
示例:

这里就是一个简单路由实现业务逻辑的示例。
三、APIRouter模块化路由
在FastAPI中组织路由,通常有两种主流方式:
-
直接在主应用实例上定义路由,适合简单场景;
-
使用
APIRouter模块化地组织路由,这在大型项目中更高效。下面这个表格汇总了它们的主要特点和适用场景:
| 特性 | 直接应用路由 | APIRouter 模块化路由 |
|---|---|---|
| 适用场景 | 简单应用,路由数量少 | 中大型项目,需要分模块 |
| 代码结构 | 所有路由集中在主文件 | 路由按模块拆分,结构清晰 |
| 可维护性 | 低,不易维护 | 高,易于维护和扩展 |
| 团队协作 | 差,容易产生冲突 | 好,不同开发者负责不同模块 |
| 前缀/Tags | 需手动为每个路由添加 | 可在路由器级别统一设置 prefix 和 tags |
通常在项目规模比较大的情况下,都会使用APIRouter将路由进行分模块管理。
通常在使用APIRouter,会先创建他的实例,并为模块设置参数,并且定义一个路由处理函数

然后导入路由,在main函数中,实例化fastapi对象,在进行路由注册

运行:打印消息message:hello world

四、请求参数
通常客户端会发来一个Request请求也就是http+请求内容,给我们服务器,也就是FastAPI,我们会返回有一个Response相应。
这里我们可以借用pychram的http工具进行模拟网站发送的GET请求,返回hello world

下面做一些简单的传入理由的关键字介绍,可以帮你更好的理解

请求体
他是客户端向服务器发送大量结构化数据的最主要方式,通常用于 POST、PUT 或 PATCH 请求 。
接下来介绍一下Pydantic BaseModel 的核心作用
在进行请求体数据解析提取时,需要使用Pydantic进行数据获取和验证
我们需要定义一个类继承Pydantic.BaseModel,在里面定义想要使用的字段,在定义完继承类后,我们就可以把他看成一种类型,下图使用的是Idem类型,FastAPI就可以识别这是一个请求体参数,就会进行解析,对传入数据进行校验。
注意:在写post请求时,在Accept下面一定要空一行,不然可能无法识别。

Header和Cookie
除了上述传输之外,FastAPI还允许从HTTP协议的其他部分提取数据,但是这里就需要使用fastapi的一些特定的函数进行标记。
例如:Header的标记就是用X-Token来接收的
Cookie的标记是用 session_id接收的

五、响应参数
还有一些简单的相应参数,我就不做一一描述了,给大家简单展示一下,下面有图片相应和HTML文件相应,这里注意,由于是开发者自己学习,没有跟前端交互,所以我们需要手动导入图片搭配pycharm中。下图还有很多相应,开发者可以自己学习。
| 响应类型 | 用途 | 示例 |
|---|---|---|
| JSONResponse | 默认响应,返回JSON数据 | return {"key": "value"} |
| HTMLResponse | 返回HTML内容 | return HTMLResponse(html_content) |
| PlainTextResponse | 返回纯文本 | return PlainTextResponse("text") |
| FileResponse | 返回文件下载 | return FileResponse(path) |
| StreamingResponse | 流式响应 | 生成器函数返回数据 |
| RedirectResponse | 重定向 | return RedirectResponse(url) |

下面简单介绍一下,我们可以写错误状态码,通过status_code关键字可以使用

我们在常见的服务器中,通常不会出现报错的情况,因为我们设置了错误捕获,不然出现错误,就会导致服务器崩溃,所有用户都无法访问,这是我们不能接受的,下面为大家介绍一些,异常捕获

更多推荐

所有评论(0)