FastAPI - 生成 OpenAPI.json 后将其切换 - 在哪里放置代码?

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

FastAPI 生成“openapi.json”文件并为其提供接口。

为了进行实验,我需要将其替换为第三方文件。

from pathlib import Path
import json
app.openapi_schema = json.loads(Path(r"myopenapi.json").read_text())

当我将此代码放在端点后面时,例如“/”

@app.get("/", include_in_schema=FULL_SCHEMA)
def read_root():
    # code here

调用一次端点后,“/docs”界面会显示加载的myopenapi.json,并覆盖原来的。功能没有改变,旧的定义仍然有效。

我希望能够在 FastAPI 完成设置并创建所有端点后直接进行切换。

将其放入启动代码块中不起作用 (

async def lifespan(app: FastAPI):
) - 当达到
yield
时,
app.openapi _schema
尚未创建。

FastAPI应用程序生成后更改的正确位置在哪里?

FastAPI 使用以下命令启动:

uvicorn.run(app, host=SERVER_HOST, port=SERVER_PORT, workers=1)
python fastapi openapi startup
1个回答
0
投票

@Helen 在评论部分有正确的想法

“问题”是 FastAPI 中的 openapi 模式是按需创建的,而不是在启动时创建的。

添加此代码即可工作

def custom_openapi():
    if app.openapi_schema:
        return app.openapi_schema

    openapi_schema= yaml.safe_load(Path("swagger.yaml").read_text())

    # remove the server from the schema
    del openapi_schema['servers']

    app.openapi_schema = openapi_schema
    return app.openapi_schema

app = FastAPI()
app.openapi = custom_openapi

并且还可以在

StarletteHTTPException
上添加异常处理程序,然后针对那些未实现的伪造端点,使用
404
切换出
501
错误。

© www.soinside.com 2019 - 2024. All rights reserved.