fastapi之APIRouter
fastapi提供APIRouter将不同功能模块的端点进行划分。这对大型程序的组织来说是非常有用的。
一、使用ApiRouter:
from fastapi import APIRouter
router = APIRouter()
@router.get("/users/", tags=["users"])
async def read_users():
return [{"username": "Rick"}, {"username": "Morty"}]
@router.get("/users/me", tags=["users"])
async def read_user_me():
return {"username": "fakecurrentuser"}
@router.get("/users/{username}", tags=["users"])
async def read_user(username: str):
return {"username": username}
二、使用依赖项:
from fastapi import Header, HTTPException, APIRouter
async def get_token_header(x_token: str = Header()):
if x_token != "fake-super-secret-token":
raise HTTPException(status_code=400, detail="X-Token header invalid")
async def get_query_token(token: str):
if token != "jessica":
raise HTTPException(status_code=400, detail="No Jessica token provided")
router = APIRouter(
prefix="/items", (1)
tags=["items"],
dependencies=[Depends(get_token_header)], (2)
responses={404: {"description": "Not found"}},
)
@router.get("/{item_id}")
async def read_item(item_id: str):
if item_id not in fake_items_db:
raise HTTPException(status_code=404, detail="Item not found")
return {"name": fake_items_db[item_id]["name"], "item_id": item_id}
(1)声明路由前缀,所有router下的路由都将拥有/items前缀,如/items/{item_id}。
(2)创建APIRouter时指定依赖项,该router下的所有路由都将使用get_token_header。
三、在FastApi主体中导入路由
在主体程序中导入其他模块的路由。
from fastapi import Depends, FastAPI
from .dependencies import get_query_token, get_token_header (1)
from .internal import admin (2)
from .routers import items, users (3)
app = FastAPI(dependencies=[Depends(get_query_token)]) (4)
app.include_router(users.router) (5)
app.include_router(items.router)
app.include_router(
admin.router,
prefix="/admin",
tags=["admin"],
dependencies=[Depends(get_token_header)],
responses={418: {"description": "I'm a teapot"}},
) (6)
@app.get("/")
async def root():
return {"message": "Hello Bigger Applications!"}
(1)导入依赖项
(2)导入子模块
(3)导入其他模块路由
(4)创建FastAPI,同时指定全局依赖项。
(5)将用户模块路由导入FastApi全局对象中。
(6)将子模块的路由导入FastApi全局对象中,并且指定一个依赖项。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix