我在互联网上找不到任何关于如何实际提取和利用由OpenAPI包生成的apispec规范来生成Swagger页面的信息。
我不想依赖一个没有像flask-apispec那样被积极维护的包。我只想使用flask-swagger-ui、apispec和其他标准/维护良好的软件包。
这是我的测试应用。我不知道APISpec是否工作正常,因为文档没有告诉您如何处理对象,但是Flask应用程序是功能良好的。
from flask import Flask, request, abort
from marshmallow import Schema, fields
from apispec import APISpec
from apispec.ext.marshmallow import MarshmallowPlugin
from apispec_webframeworks.flask import FlaskPlugin
app = Flask(__name__)
spec = APISpec(
title="Doubler",
version="1.0.0",
openapi_version="3.0.2",
plugins=[FlaskPlugin(), MarshmallowPlugin()],
)
class InputSchema(Schema):
useless_1 = fields.String(required=True, description='A string')
useless_2 = fields.Int(missing=5, description='An integer')
class OutputSchema(Schema):
doublyuseless_1 = fields.String(required=True)
doublyuseless_2 = fields.Int(required=True)
inputschema = InputSchema()
outputschema = OutputSchema()
@app.route('/double', methods=['GET'])
def double():
"""A doubler.
---
get:
description: Double things
parameters:
schema:
InputSchema
responses:
200:
description: Double things
content:
application/json:
schema: OutputSchema"""
errors = inputschema.validate(request.args)
if errors:
abort(400, str(errors))
return_dict = {}
args = inputschema.load(request.args)
return_dict['doublyuseless_1'] = args['useless_1']*2
return_dict['doublyuseless_2'] = args['useless_2']*2
return outputschema.dump(return_dict)
with app.test_request_context():
spec.path(view=double)更新:使用下面的代码,我现在在根上得到一个空白页,标题为Swagger,但没有内容。
with app.test_request_context():
spec.path(view=double)
with open('swagger.json', 'w') as f:
dict_ = yaml.load(StringIO(spec.to_yaml()), Loader=yaml.SafeLoader)
print(dict_)
with open('swagger.json', 'w') as f:
json.dump(dict_, f)
SWAGGER_URL = '/'
API_URL = 'swagger.json'
swaggerui_blueprint = get_swaggerui_blueprint(
SWAGGER_URL, # Swagger UI static files will be mapped to '{SWAGGER_URL}/dist/'
API_URL,
config={ # Swagger UI config overrides
'app_name': "Doubler"
},
# oauth_config={ # OAuth config. See https://github.com/swagger-api/swagger-ui#oauth2-configuration .
# 'clientId': "your-client-id",
# 'clientSecret': "your-client-secret-if-required",
# 'realm': "your-realms",
# 'appName': "your-app-name",
# 'scopeSeparator': " ",
# 'additionalQueryStringParams': {'test': "hello"}
# }
)发布于 2022-05-27 13:06:52
我最初问题的解决方案非常简单:ApiSpec有一个to_dict和一个to_yaml方法来导出swagger.json。我的第二个问题是更深奥的。我需要使用一个不是SWAGGER_URL的/,因为出于某种原因,这导致页面在http://swagger-ui.js这样的URL上查找核心Swagger文件,这显然不起作用。当我更改到/doc的路径后,我仍然有一个白色的屏幕,但是可以通过自己在/doc托管文件来解决这个问题(我认为flask_swagger_ui应该自动完成这一操作,但是嘿,它成功了)。
https://stackoverflow.com/questions/72369545
复制相似问题