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搭建几个服务进行练手,后续也会输出相关文档,尽情期待吧!

相关推荐
谭光志4 小时前
Vibe Coding 时代,程序员该何去何从
前端·后端·ai编程
GoGeekBaird5 小时前
我用 BeeWeave 跑完了一次完整写作闭环
后端·github
闻道且行之5 小时前
TurboOCR:基于PP-OCRv6的极速Windows离线OCR工具,深度解析3.4GB依赖背后的技术架构
c++·人工智能·python·qt·机器学习·ocr
仿生狮子6 小时前
别再说“全栈”了,AI 时代团队只认这 5 种人
前端·人工智能·后端
许彰午6 小时前
95_Python内存管理与垃圾回收
开发语言·python
骄阳如火7 小时前
Python 性能深度剖析:从“被诟病的慢”到“Rust 重塑”的拐点
python
满怀冰雪7 小时前
03-第一个 Paddle 程序:Tensor 创建、计算与设备管理
人工智能·python·paddle
CClaris7 小时前
大模型量化从0到1(九):用 llama.cpp 把模型转成 GGUF 并跑本地推理
人工智能·pytorch·python·深度学习·llama
学编程的小虎7 小时前
SenseVoice微调
人工智能·python·自然语言处理
诸葛说抛光8 小时前
国内大型汽车改装展览会定展 佛山改装 佛山汽车赛事
python·汽车