FastAPI 基于 APIRouter 实例的路由注册

前言

前段时间使用FastApi重构了Java代码覆盖率统计服务,当然是基于快速简单的FastApi使用,现在把知识延伸,深挖一下每个知识点,对于FastApi路由注册,我们刚接触框架时,最简单的注册方法就是:基于app实例对象提供的装饰器或函数进行注册。但在查看一些优秀的开源源码时,好多使用的APIRouter,那就先看看APIRouter如何注册路由呢?

什么是 APIRouter?

APIRouter 是 FastAPI 中的一个类,用于定义和管理路由。它允许你将一组相关的路由和处理函数组织在一起,形成一个独立的模块化单元,以便更好地组织和管理你的 API。

使用 APIRouter 的优势

  • 模块化组织 : 可以将相关的路由和处理函数组织在一个 APIRouter 实例中,使得代码结构更加清晰和易于维护。
  • 路由重用 : 可以将同一个 APIRouter 实例在多个地方引用,实现路由的重用,避免重复编写相同的路由配置。
  • 路由前缀 : 可以为 APIRouter 实例指定一个统一的前缀,用于统一管理相关路由的路径。
  • 异常处理 : 可以在 APIRouter 实例上注册异常处理器,对特定路由的异常进行定制化处理。

使用案例

python 复制代码
from fastapi import FastAPI, APIRouter
​
​
router_login = APIRouter(prefix="/login", tags=["登录模块"])
router_pay = APIRouter(prefix="/pay", tags=["支付模块"])
​
@router_login.get("")
async def login():
    return {"message": "登录成功"}
​
@router_pay.get("/order")
async def pay():
    return {"message": "支付成功"}

上面的代码中,引入了APIRouter这个新类,通过该类实例化两个不同的APIRouter对象,并将它们分别绑定关联到login()和pay()两个视图函数上。

  • prefix:当前整个全局路由对象请求URL地址前缀。
  • tags:API分组归属标签。

我们已经完成路由分组和对应视图函数绑定,然后在 FastAPI 应用程序中注册 APIRouter,代码如下

scss 复制代码
app = FastAPI()
​
app.include_router(router_login)
app.include_router(router_pay)

上面代码中使用app.include_router()把APIRouter对象添加到app路由列表里面。include_router()函数的执行过程其实就是把所有子router中的路由都拆解出来并添加到根router,经过处理后,路由节点就注册完成了

好了,我们启动服务看看效果

给路由配置多个HTTP请求方法

APIRouter实例对象提供api_route的装饰器来支持配置多个HTTP请求方法

示例:

python 复制代码
@router_login.api_route("", methods=["GET", "POST"])
async def login():
    return {"message": "登录成功"}
​
@router_pay.api_route("/order", methods=["GET", "POST"])
async def pay():
    return {"message": "支付成功"}
​

启动服务,我们在看看效果

最后

通过使用 APIRouter 实例,可以有效地组织和管理 FastAPI 应用程序中的路由,使得代码结构更加清晰和模块化。它提供了路由重用、路由前缀、异常处理等功能,为开发者提供了更好的开发体验和代码组织方式。
之后,决定再使用FastAPI搭建几个服务进行练手,后续也会输出相关文档,尽情期待吧!

相关推荐
大鸡腿同学1 小时前
从 CoT 思维链到 ReAct:智能 Agent 到底是怎么 “思考” 的?
后端
IT_陈寒3 小时前
Vite的静态资源打包让我熬夜到三点,这坑千万别跳
前端·人工智能·后端
SamDeepThinking4 小时前
高并发场景下,CompletableFuture与ForkJoinPool该如何取舍?
java·后端·面试
学测绘的小杨4 小时前
CompassFusion:一个从 GNSS 到 GNSS/INS 组合导航的独立工程包
python
Asize4 小时前
多模态生图:从 Vite 工程化到前端调用 Qwen Image
javascript·人工智能·后端
java小白小4 小时前
SpringBoot(09):缓存实战——穿透、雪崩、击穿的解决方案
后端
java小白小4 小时前
SpringBoot(08):Redis 集成——5 分钟给你的项目加上缓存
后端
LiuMingXin5 小时前
意图与代码之间:AI编程范式全景解读
前端·后端·面试
用户34232323763175 小时前
边缘计算与云边协同——当采集不再只是“上传“
后端
壹方秘境5 小时前
ApiCatcher支持抓包HTTP传输大文件的实现原理分享
前端·后端·客户端