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 过滤可以只保留你自己编写的业务接口。
二,测试效果:

浙公网安备 33010602011771号