- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
TLDR;我希望实现的目标:
由于可以选择在 flasgger
中加载通用/应用程序范围的架构(如实例化 Swagger
时的 template_file
参数所定义),我该如何使用通用 json 模式文件时,自动验证发送到具有关联的 Flask-restful 端点的所有数据 Resource
类?
我目前正在设计一个 API,并遇到了这样的情况:当我从 json 模板文件定义整个架构并使用 Flask-restful 资源类时,API 调用中提供的数据未经过验证。
使用有效负载发布到 /product
会导致预期的 501 响应。但是,使用无效负载进行发布也会导致 501 响应。
预期有效负载:
{
"id": 0,
"name": "Toy",
"photoUrls": [
"string"
],
"status": "available"
}
验证失败的有效负载:
{
"id": 0,
"name": "test",
"status": "available"
}
下面是 Resource
类的片段以及我如何配置 flasgger
# https://github.com/flasgger/flasgger
# pip install flask flasgger flask-restful
from flasgger import Swagger, LazyString, LazyJSONEncoder
from flask import Flask, jsonify, request, url_for
from flask_restful import Api, Resource
app = Flask(__name__)
api = Api(app)
app.json_encoder = LazyJSONEncoder
app.config['SWAGGER'] = {
'title': 'TestAPI',
'uiversion': 3,
'favicon': LazyString(lambda: url_for('static', filename='logo.png')),
'swagger_ui_css': LazyString(lambda: url_for('static', filename='swagger-ui.css')),
'specs_route': '/docs/'
}
swagger = Swagger(app, template_file='static/Swagger.json')
class NewProduct(Resource):
def post(self):
return '', 501
api.add_resource(NewProduct, '/product')
if __name__ == "__main__":
app.run(debug=True)
下面是 Swagger.json
文件的内容
{
"swagger": "2.0",
"info": {
"description": "",
"version": "1.0.0",
"title": "POC for Non-validation Issue",
"termsOfService": "http://swagger.io/terms/",
"contact": {
"email": "testing@abc.com"
},
"license": {
"name": "Apache 2.0",
"url": "http://www.apache.org/licenses/LICENSE-2.0.html"
}
},
"host": "",
"basePath": "/",
"tags": [
{
"name": "Product",
"description": "Operations to manage product info",
"externalDocs": {
"description": "Find out more",
"url": "http://swagger.io"
}
}
],
"schemes": [
"http"
],
"paths": {
"/product": {
"post": {
"tags": [
"Product"
],
"summary": "Add a new product",
"description": "",
"operationId": "addProduct",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"parameters": [
{
"in": "body",
"name": "body",
"description": "",
"required": true,
"schema": {
"$ref": "#/definitions/Product"
}
}
],
"responses": {
"200": {
"description": "Product created"
},
"405": {
"description": "Invalid input"
},
"501": {
"description": "Not Yet Implemented"
}
}
}
}
},
"definitions": {
"Product": {
"type": "object",
"required": [
"name",
"photoUrls"
],
"properties": {
"id": {
"type": "integer",
"format": "int64"
},
"name": {
"type": "string",
"example": "Toy"
},
"photoUrls": {
"type": "array",
"xml": {
"name": "photoUrl",
"wrapped": true
},
"items": {
"type": "string"
}
},
"status": {
"type": "string",
"description": "State of availability",
"enum": [
"available",
"pending",
"sold"
]
}
},
"xml": {
"name": "Toy"
}
}
}
}
我最初在每个函数上使用单独的函数和 @swag_from('myfile.yml',validation=True)
装饰器,但为了 OOP 最佳实践,我想使用类来代表各自的端点。
我想,自从我在实例化 Swagger
时加载了 json template_file
后,端点将根据该文件中的定义进行验证,但似乎情况并非如此出于某种原因(或者我做错了什么)。
任何人都可以提供一些关于如何根据 template_file
定义验证类的所有端点的见解吗?甚至可以用 Flasgger
项目的当前状态来完成还是缺少该功能?
注释:
1.我创建了一个 issue关于 Flasgger github repo,这是我在这篇文章之后仔细镜像的内容。但是,由于现在该仓库相当无人居住,我觉得我更有可能在这里得到答案。
2. 我不希望使用 Marshmallow 架构,我希望能够在首次实例化 Flasgger
时从 json 文件加载我的 swagger 架构并应用它(已根据 json 文件中的定义
验证所有适用的路由)作为一个整体到所有路由。
最佳答案
我猜问题出在 swagger = Swagger(app, template_file='static/Swagger.json')
中。您能否添加选项parse
并让我知道该行为。
swagger = Swagger(app, template_file='static/Swagger.json', parse=True)
关于python - 如何使 Flasgger 根据 template_file 自动验证 Flask-restful 资源端点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58277780/
我正在做一个需要通过 flasgger UI 上传文件的项目。我根据 Swagger 文档修改了我的 conf,但似乎不起作用。下面是我的 session 。请告知错误。 """ This API l
我正在尝试从 Swagger API 返回 excel 文件。使用 Flask 和带有 Flasgger 的 Swagger 包装器构建它。这是代码 - @app.route('/cluster',
我正在使用 Flasgger 将 Swagger UI 添加到我的 Python Flask 应用程序中.互联网上最常见的示例是使用 @app.route 的基本 Flask 样式: from fla
我正在尝试使用 swagger ui 作为前端来查询我的 Flask 应用程序。我正在使用Flasgger我尝试了一个玩具示例,如下所示 from flasgger import Swagger fr
我想使用 json 远程引用创建一个单独的 definitions.yml 文件,这样我就可以在多个 YML 文件中共享定义。 我们按照 https://azimi.me/2015/07/16/spl
TLDR;我希望实现的目标: 由于可以选择在 flasgger 中加载通用/应用程序范围的架构(如实例化 Swagger 时的 template_file 参数所定义),我该如何使用通用 json 模
我是一名优秀的程序员,十分优秀!