fastapi: 列出所有include_router所包含的router以及每个router下的路由

一,代码:

说明:

router要加上tag做说明

endpoint要加上summary做说明

@router.get("/allroutes", summary="路由列表")
def get_routers_and_routes(request: Request):
    current_app = request.app

    # 用字典来对 router 进行归类,Key 为 router 的标签名 (Tag)
    # 因为在 FastAPI 中,一个 APIRouter 通常会绑定一个独特的 tags 清单
    router_mapping = {}

    for route in current_app.routes:
        # 只处理用户定义的业务路由
        if isinstance(route, APIRoute):
            # 获取当前路由的标签,如果没有设置标签,归为 "Default"
            # route.tags 通常是一个列表,比如 ["UserManagement"]
            route_tags = route.tags if route.tags else ["Default"]

            if route.path == '/':
                continue

            # 路由的基础信息
            route_info = {
                "path": route.path,
                "methods": list(route.methods),
                "endpoint_name": route.name,
                "summary": route.summary
            }

            # 按 Tag 将路由归类到对应的 router 组中
            for tag in route_tags:
                if tag not in router_mapping:
                    router_mapping[tag] = {
                        "router_tag": tag,
                        "routes_count": 0,
                        "routes": []
                    }
                router_mapping[tag]["routes"].append(route_info)
                router_mapping[tag]["routes_count"] += 1

    # 将字典转为列表格式返回
    return {"routers": list(router_mapping.values())}

 

二,测试效果:

image

 

posted @ 2026-07-22 16:10  刘宏缔的架构森林  阅读(0)  评论(0)    收藏  举报