You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask集成Swagger UI报错:Failed to load API definition求助

Flask Swagger文档加载失败问题排查

问题背景

我用Flask开发API,原有创建应用的代码如下:

def create_app():
    """Create Flask app."""
    app = Flask(__name__)

    # 允许/endpoint和/endpoint/两种URL格式
    app.url_map.strict_slashes = False

    # 注册所有启用的蓝图
    for url, blueprint in ACTIVE_ENDPOINTS:
        app.register_blueprint(blueprint, url_prefix=url)

    return app

为给API添加文档,我创建了static目录并放入swagger.json模板文件,修改create_app函数添加Swagger配置:

def create_app():
    """Create Flask app."""
    app = Flask(__name__)

    # 允许/endpoint和/endpoint/两种URL格式
    app.url_map.strict_slashes = False

    # 注册所有启用的蓝图
    for url, blueprint in ACTIVE_ENDPOINTS:
        app.register_blueprint(blueprint, url_prefix=url)

    # Swagger配置
    SWAGGER_URL = "/swagger"
    API_URL = "/static/swagger.json"
    SWAGGER_BLUEPRINT = get_swaggerui_blueprint(
        SWAGGER_URL,
        API_URL,
        config={
            "app_name": "iam-challenge-juanda"
        }
    )
    app.register_blueprint(SWAGGER_BLUEPRINT, url_prefix=SWAGGER_URL)

    @app.route("/static/swagger.json")
    def specs():
        return send_from_directory(os.getcwd(), "swagger.json")

    return app

运行应用后,访问Swagger页面时收到错误:

Failed to load API definition - Fetch error
NOT FOUND /static/swagger.json

我认为URL配置正确,请问这是什么原因?


问题原因及修复方案

1. 手动路由的路径错误

你手动添加的/static/swagger.json路由里,send_from_directory传入的是当前工作目录os.getcwd(),但swagger.json实际放在static子目录下,导致Flask在根目录找不到这个文件。

2. 无需手动定义静态文件路由

Flask默认会自动处理/static/前缀的请求,直接映射到项目根目录下的static文件夹。手动添加的路由不仅多余,还会因为路径错误覆盖默认的静态文件处理逻辑。

修复步骤

  • 删除手动添加的路由代码:移除以下这段代码
    @app.route("/static/swagger.json")
    def specs():
        return send_from_directory(os.getcwd(), "swagger.json")
    
  • 确认文件位置:确保swagger.json确实在项目根目录的static文件夹内,结构如下:
    你的项目/
    ├── static/
    │   └── swagger.json
    └── 你的启动文件.py
    
  • 验证配置:原有的API_URL = "/static/swagger.json"配置是正确的,删除手动路由后,Flask会自动处理这个静态文件请求,Swagger UI就能正常加载文档了。

如果你的静态文件目录不是默认的static,可以在创建Flask实例时指定:

app = Flask(__name__, static_folder="自定义静态目录路径")

内容的提问来源于stack exchange,提问作者Juan David Serna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 20:55:20