fastapi: 第二章:用路由拆分程序文件

一,什么是路由?

什么是路由?
简单来说,路由就是“网址”和“处理函数”之间的对应关系。

举个例子:

当用户访问 http://localhost:8000/users/123 时,FastAPI需要知道应该调用哪个函数来处理这个请求

当用户访问 http://localhost:8000/products/456 时,又应该调用另一个函数

这个映射关系,就是路由。

二,为什么需要路由模块化?

有的初学者会把所有路由写在一个main.py文件里。
这在只有两三个接口时没问题,但一旦项目变大,这个文件会变得非常臃肿,难以维护。

例如:一个电商系统可能有:用户模块、商品模块、订单模块、购物车模块、支付模块...如果全部塞进一个文件,代码可能达到几千行。
无论是找代码还是改代码,都会非常痛苦。

模块化的好处:

每个模块独立一个文件,职责清晰

多人协作时不会产生代码冲突

方便复用和测试

便于实现API版本管理

曾经有两个新手同事把代码写在一个文件中,自己维护时定位功能模块非常麻烦

三,代码

# api/products.py

# api/products.py
from fastapi import APIRouter

router = APIRouter(prefix="/products", tags=["商品管理"])

@router.get("/all")
def get_all_products():
    return [{"id": 1, "name": "手机"}, {"id": 2, "name": "电脑"}]

@router.get("/one/{product_id}")
def get_product(product_id: int):
    return {"id": product_id, "name": f"商品{product_id}"}

# api/users.py

# api/users.py
from fastapi import APIRouter

# 创建路由器实例
# prefix:所有路由的统一前缀,避免重复写"/users"
# tags:在Swagger文档中分组显示
router = APIRouter(prefix="/users", tags=["用户管理"])

@router.get("/all")
def get_all_users():
    """获取所有用户"""
    return [{"id": 1, "name": "张三"}, {"id": 2, "name": "李四"}]

@router.get("/one/{user_id}")
def get_user(user_id: int):
    """根据ID获取单个用户"""
    return {"id": user_id, "name": f"用户{user_id}"}

main.py

# main.py
from fastapi import FastAPI
from api import users, products

# 创建FastAPI应用
app = FastAPI(title="我的API项目")

# 注册路由模块
app.include_router(users.router)
app.include_router(products.router)

四,测试 效果 

运行:

$ uvicorn main:app --reload

访问接口:

image

image

 

posted @ 2026-06-10 15:19  刘宏缔的架构森林  阅读(8)  评论(0)    收藏  举报