fastapi: 列出所有路由endpoint

一,代码:

在 FastAPI 中,获取所有接口的 endpoint 非常简单。FastAPI 实例(通常是 app)内部维护了一个 routes 列表,里面包含了所有注册的路由信息。

我们可以通过遍历 app.routes 来提取每个接口的 URL 路径、HTTP 方法(GET/POST等) 以及对应的 函数名称。

router = APIRouter(prefix="/permissions", tags=["权限管理"])

@router.get("/all",summary="权限列表")
def get_all_permissions(request: Request):
    """根据ID获取单个用户"""
    # print(name)
    endpoints = []
    admin_app = request.app
    for route in admin_app.routes:
        # 只筛选出用户定义的 API 路由,排除 FastAPI 自带的 /docs, /openapi.json 等静态路由
        if isinstance(route, APIRoute):
            if route.path == '/':
                continue
            endpoints.append({
                "path": route.path,
                "methods": list(route.methods),  # route.methods 是个 set,转成 list 方便 JSON 序列化
                "name": route.name,  # 函数名称
                "summary": route.summary  # 如果写了 summary 或者 docstring,这里也能拿到
            })

    return {"endpoints": endpoints}

说明:

为什么要判断 isinstance(route, APIRoute)?
FastAPI 底层基于 Starlette,它的 app.routes 默认会包含类似 /docs(Swagger UI)、/redoc 以及 /openapi.json 等内置的静态文件或文档路由(它们的类型是 Mount 或 Route)。
用 APIRoute 过滤可以只保留你自己编写的业务接口。

二,测试效果:

 image

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