flaskapi 路由管理APIRouter
前言
开发一个应用程序或API,不会将所有的代码都放到main.py文件中。Flask 使用蓝图(BluePrint)来管理路由,FastAPI 提供了一个类似的工具APIRouter。
路由管理
1、fastapi 项目目录层级
2、api/cms/user.py 定义 API 路由和处理函数。实例化 APIRouter 类 ,参数 prefix 添加路由前缀,tags 添加接口文档分类。
prefix 和 tags 这俩个参数也可以在注册路由的时候定义。
from fastapi import APIRouter,Request,Query
user = APIRouter()
# user = APIRouter(prefix='/ai', tags=['user'])
@user.get('/test')
async def test(roleName: str = Query(None)):
# 请求url:http://127.0.0.1:8000/test?roleName=admin
return {'message': roleName}
@user.get('/pro/{id}')
async def test(id: int = None ):
# 请求url:http://127.0.0.1:8000/test/10
return {'message': roleName}
@user.post('/dev')
async def dev(data: dict):
# 请求body数据验证为dict
return {'message': data}
3、在 main.py 模块,注册 api/cms/user.py 里的 user 对象
from api.user import user
from fastapi import FastAPI
import uvicorn
app = FastAPI()
@app.get("/home")
async def get():
return {'message':'OK'}
# 也可以在这里 定义 prefix 和 tags
app.include_router(user,prefix='/ai', tags=['user'])
# 注册user对象
# app.include_router(user)
if __name__ == "__main__":
uvicorn.run(app='main:app', host="0.0.0.0", log_config='./uvicorn_config.json', port=8000)
4、路由也可以单独写在routers文件夹(routers/cms.py),好处是项目层级清晰,可读性强,路由都存放一个地方,方便管理
from fastapi import APIRouter
from api.cms.user import user
cms = APIRouter()
cms.include_router(user, prefix='/ai', tags=['user'])
routers/__init__.py 定义注册路由
from .cms import cms
from fastapi import FastAPI
# 注册路由
def register_router(app: FastAPI):
app.include_router(cms)
# app.include_router(cms, prefix='/ai', tags=['user'])
main.py 调用注册路由方法
from routers import register_router
from fastapi import FastAPI
import uvicorn
app = FastAPI()
@app.get("/home")
async def get():
return {'message':'OK'}
# 调用注册路由方法
register_router(app)
if __name__ == "__main__":
uvicorn.run(app='main:app', host="0.0.0.0", log_config='./uvicorn_config.json', port=8000)
然后启动服务
swagger文档: http://127.0.0.1:8000/docs
redoc文档:http://127.0.0.1:8000/redoc