Python FastApi 生成的 Swagger 文档不会用值替换参数占位符(即 {id})

问题描述 投票:0回答:1

我尝试创建一个 fastapi 路由器来处理 2 个 int 类型的路径参数。

我希望它用我在 swagger ui 中输入的值替换占位符(即 {parameter_name})。

仅替换其中一个参数,另一个保留为带 url 编码大括号的变量名,即“%parameter_name%”。

我用fastapi定义了这条路线:

api_router = APIRouter(prefix="user/{user_id}")

@api_router.put("/post/{post_id}")
def module_deep_clone(
        user_id: int,
        post_id: int,
):
    return {"post_id": post_id, "company_id": company_id}

使用生成的 Swagger ui 会导致错误的请求 url,其中一个路径变量不会替换为以下值: “http://0.0.0.0:8000/user/123/post/{post_id}”

这会导致验证错误,因为 post_id 应该是整数而不是“%7Bpost_id%”

当我替换函数中参数定义的顺序时:

@api_router.put("/post/{post_id}")
def module_deep_clone(
        post_id: int,
        user_id: int,
):

生成的网址是: “http://0.0.0.0:8000/user/{user_id}/post/123”

这让我觉得 Swagger 只期望一个参数,但生成的 openapi.json 中的相关部分如下所示:

"parameters": [
        {
            "name": "company_id",
            "in": "path",
            "required": true,
            "schema": {
                "type": "integer",
                "title": "Company Id"
            }
        },
        {
            "name": "item_id",
            "in": "path",
            "required": true,
            "schema": {
                "type": "integer",
                "title": "Item Id"
            }
        }
    ]}

我正在使用 python 3.11,fastapi 0.101.1。

我错过了什么?

谢谢

python fastapi openapi swagger-ui
1个回答
0
投票

这是最新版本的 Swagger UI 中的一个错误。 您可以使用旧版本来克服它(https://github.com/tiangolo/fastapi/discussions/11572#discussioncomment-9403528):

app = FastAPI(docs_url=None)  # Disable default docs

from fastapi.openapi.docs import (get_swagger_ui_html,
                                  get_swagger_ui_oauth2_redirect_html)

@app.get("/docs", include_in_schema=False)
async def custom_swagger_ui_html():
    return get_swagger_ui_html(
        openapi_url=app.openapi_url,
        title=app.title + " - Swagger UI",
        oauth2_redirect_url=app.swagger_ui_oauth2_redirect_url,
        swagger_js_url="https://unpkg.com/[email protected]/swagger-ui-bundle.js",
        swagger_css_url="https://unpkg.com/[email protected]/swagger-ui.css",
    )
© www.soinside.com 2019 - 2024. All rights reserved.