Flasgger 0.9.7b2中$ref引用解析错误的解决求助
解决Flasgger 0.9.7b2中OpenAPI 2.0外部$ref解析失败的问题
方法1:手动合并外部定义到主Spec
Flasgger的beta版本对外部YAML文件的$ref解析存在路径处理问题,可通过手动加载并合并定义的方式绕过:
- 在Flask初始化代码中,分别加载主API文档和model.yml的内容:
import yaml from flask import Flask from flasgger import Swagger app = Flask(__name__) # 加载主API配置 with open('main_api.yml', 'r', encoding='utf-8') as f: main_spec = yaml.safe_load(f) # 加载Model定义文件 with open('model.yml', 'r', encoding='utf-8') as f: model_spec = yaml.safe_load(f) # 将model中的definitions合并到主spec if 'definitions' not in main_spec: main_spec['definitions'] = {} main_spec['definitions'].update(model_spec['definitions']) # 使用合并后的spec初始化Swagger swagger = Swagger(app, template=main_spec)
- 修改主API.yml中的$ref,直接引用内部合并后的定义:
responses: 200: description: Successfully fetched models. schema: $ref: "#/definitions/Model"
方法2:调整路径写法并指定base_path
尝试修正$ref的路径格式,并在Swagger初始化时指定基础路径:
- 修改主API.yml中的$ref为相对路径格式:
responses: 200: description: Successfully fetched models. schema: $ref: "./model.yml#/definitions/Model"
- 初始化Swagger时添加
base_path参数:
swagger = Swagger(app, swagger_from_file='main_api.yml', base_path='./')
方法3:降级到稳定版Flasgger
0.9.7b2作为beta版本,存在$ref解析的已知bug,降级到稳定版可解决问题:
pip install flasgger==0.9.6
降级后保持原有的YAML配置即可正常加载外部定义。
内容的提问来源于stack exchange,提问作者Y0oo0
相关产品推荐
相关产品推荐

