fastapi mount在swagger中不可见

ljsrvy3e  于 2023-05-28  发布在  其他
关注(0)|答案(1)|浏览(167)

for my basic基本fastapi应用

from ...
from fastapi.routing import APIRoute, Mount

routes = [
    APIRoute("/", methods=["get"], endpoint=read_root),
    Mount('/square', name='square', routes=[
        APIRoute("/{value}", methods=["get"], endpoint=read_item)
    ])
]

app = FastAPI(routes=routes)

if __name__ == "__main__":
    uvicorn.run("main:app", host="0.0.0.0", port=9999)

我在自动生成的swagger中看不到Mount,根/是可见的,可以工作,但不是/square,为什么?

xtupzzrd

xtupzzrd1#

这可能是因为FastAPI生成的OpenAPI模式只包含定义了端点函数的路由。在您的示例中,read_item端点函数是为/square/{value}路由定义的,而不是为/square路由本身定义的。
要使/square路由在Swagger UI中可见,您可以为其定义一个单独的端点函数,即使它只是返回一个简单的消息或重定向到另一个页面。例如:

async def read_square():
    return {"message": "This is the /square endpoint"}

routes = [
    APIRoute("/", methods=["get"], endpoint=read_root),
    Mount('/square', name='square', routes=[
        APIRoute("/", methods=["get"], endpoint=read_square),  # Add this line
        APIRoute("/{value}", methods=["get"], endpoint=read_item)
    ])
]

然后,当你运行你的应用程序并导航到Swagger UI时,你应该看到//square路由都列在“路径”下。

相关问题