我正在为具有 OpenAPI (Swagger) 定义的 REST API 构建模糊器。
我想测试 OpenAPI 定义中的所有可用路径,生成数据以测试服务器,分析响应代码和内容,并验证响应是否符合 API 定义。
我正在寻找一种从模型定义生成数据(JSON 对象)的方法。
例如,给定这个模型:
...
"Pet": {
"type": "object",
"required": [
"name",
"photoUrls"
],
"properties": {
"id": {
"type": "integer",
"format": "int64"
},
"category": {
"$ref": "#/definitions/Category"
},
"name": {
"type": "string",
"example": "doggie"
},
"photoUrls": {
"type": "array",
"items": {
"type": "string"
}
},
"tags": {
"type": "array",
"items": {
"$ref": "#/definitions/Tag"
}
},
"status": {
"type": "string",
"description": "pet status in the store"
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想生成随机数据并得到如下内容: …
我在文档中的某处读到AWS API Gateway包含对Swagger的支持,但Swagger现在更正式地称为OpenAPI规范,并且已经碰到主要版本3.0.
在撰写本文时,OpenAPI 3规范相对较新.我正在努力寻找支持3.0版的任何文档生成器.
有谁知道支持OpenAPI v3.0的生成器?
我正在使用 Swagger OpenAPI 规范工具,我在以下定义之一中有一个字符串数组属性:
cities:
type: array
items:
type: string
example: "Pune"
Run Code Online (Sandbox Code Playgroud)
我的 API 生成 JSON 结果,因此对于上述对象,以下结果出现在响应中:
{
"cities": [
"Pune"
]
}
Run Code Online (Sandbox Code Playgroud)
试过逗号分隔的字符串,如下所示:
cities:
type: array
items:
type: string
example: "Pune", "Mumbai", "Bangaluru"
Run Code Online (Sandbox Code Playgroud)
预期结果为:
{
"cities": [
"Pune",
"Mumbai",
"Bangaluru"
]
}
Run Code Online (Sandbox Code Playgroud)
但是编辑器显示错误。“错误的缩进”
我想为示例标签提供多个值有什么办法吗?
更新
下面的用户 Helen 给出了正确答案我有缩进问题,因此有嵌套数组(二维数组)
正确方法:
cities:
type: array
items:
type: string
example:
- Pune
- Mumbai
Run Code Online (Sandbox Code Playgroud)
我的方式(这是错误的)
cities:
type: array
items:
type: string
example:
- Pune
- Mumbai
Run Code Online (Sandbox Code Playgroud)
example在上述两种情况下寻找标记的缩进,这会有所不同,它的 YAML 缩进很重要。
有没有办法记录以下查询?
GET api/v1/users?name1=value1&name2=value
Run Code Online (Sandbox Code Playgroud)
其中查询参数名称是动态的,将从客户端接收.
我正在使用最新的Swagger API.
我正在创建一个V2函数应用程序,并希望将Swagger/Open API用于文档,但Azure Portal for V2 Functions尚不支持它.
关于如何在VSTS中使用Swagger和V2函数在每个构建中创建文档的任何建议?
根据一般的文档,
Swagger-UI在四个位置接受配置参数。
从最低到最高优先级:
- 项目根目录中的swagger-config.yaml(如果存在)被烘焙到应用程序中
- 配置对象作为参数传递给Swagger-UI(SwaggerUI({...}))
- 从指定的configUrl获取的配置文档
- 在URL查询字符串中作为键/值对传递的配置项
我试图将swagger-config.yaml放在应用程序的根目录中,但无法正常工作。
我遵循了昂首阔步的安装步骤及其正常工作。但是大步自定义配置的步骤不起作用。我保存了以下文件,
swagger-ui
|--swagger-config.yaml
|--index.html
Run Code Online (Sandbox Code Playgroud)
url: "https://petstore.swagger.io/v2/swagger.json"
dom_id: "#swagger-ui"
validatorUrl: "https://online.swagger.io/validator"
oauth2RedirectUrl: "http://localhost:3200/oauth2-redirect.html"
Run Code Online (Sandbox Code Playgroud)
// Begin Swagger UI call region
const ui = SwaggerUIBundle({
//url: "https://petstore.swagger.io/v2/swagger.json",
//dom_id: '#swagger-ui',
deepLinking: true,
presets: [
SwaggerUIBundle.presets.apis,
SwaggerUIStandalonePreset
],
plugins: [
SwaggerUIBundle.plugins.DownloadUrl
],
layout: "StandaloneLayout"
})
Run Code Online (Sandbox Code Playgroud)
我有什么想念的吗?
我通过 SwaggerHub 进行了新的 OpenAPI 设置。是否可以选择Accept全局强制某个标头?
我已经设置了Content-Type响应:
openapi: 3.0.0
paths:
/test-path:
get:
responses:
'200':
description: OK
content:
application/vnd.company.v1.0.0+json:
Run Code Online (Sandbox Code Playgroud)
Accept通过 cURL 请求插入不同的标头时,会执行以下操作:
{"message":"Missing matching response for specified Accept header"}
Run Code Online (Sandbox Code Playgroud)
这是有道理的,因为我们没有为此提供任何回应。
我试图为我现有的 Flask 应用程序生成 swagger 文档,我Flask-RESTPlus最初尝试并发现该项目现在很丰富,并在分叉项目flask-restx https://github.com/python-restx/flask-restx 中进行了检查,但我仍然不认为他们支持 openapi 3.0
我有点困惑选择我需要的包。我希望解决一个问题,即我们不想为我们的 API 手动创建 swagger 文档,而是希望使用包自动生成。
import os
import requests
import json, yaml
from flask import Flask, after_this_request, send_file, safe_join, abort
from flask_restx import Resource, Api, fields
from flask_restx.api import Swagger
app = Flask(__name__)
api = Api(app=app, doc='/docs', version='1.0.0-oas3', title='TEST APP API',
description='TEST APP API')
response_fields = api.model('Resource', {
'value': fields.String(required=True, min_length=1, max_length=200, description='Book title')
})
@api.route('/compiler/', endpoint='compiler')
# @api.doc(params={'id': 'An ID'})
@api.doc(responses={403: 'Not Authorized'})
@api.doc(responses={402: 'Not Authorized'}) …Run Code Online (Sandbox Code Playgroud) 我正在将我的 API 从 Swagger 2.0 迁移到 OpenAPI 3.0。在 DTO 中,我有一个指定为字节数组的字段。DTO 的 Swagger 定义:
Job:
type: object
properties:
body:
type: string
format: binary
Run Code Online (Sandbox Code Playgroud)
使用上面的定义,swagger 代码生成器生成一个接受byte[]数组作为主体字段的对象new Job().setBody(new byte[1])。
将 API 定义转换为 OpenAPI 后,该对象的定义保持不变,但 openapi 代码生成器现在需要org.springframework.core.io.Resource而不是byte[]( new Job().setBody(org.springframework.core.io.Resource))。在我的代码中有一些地方我必须序列化 Job 对象,但它不再可能,因为Resource没有实现可序列化。
作为一种解决方法,我将类型更改为object:
Job:
type: object
properties:
body:
type: object
Run Code Online (Sandbox Code Playgroud)
现在我必须将身体投射到String然后转换到byte[]任何地方,我宁愿byte[]像以前一样拥有类型。
如何指定类型为byte[]使用 OpenAPI 3.0?
openapi ×10
swagger ×8
swagger-2.0 ×2
azure-devops ×1
flask ×1
java ×1
javascript ×1
json ×1
python ×1
spring ×1
swagger-ui ×1
swaggerhub ×1
yaml ×1