我正在为具有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"
}
}
}
我想生成随机数据,得到这样的东西:
{
"id": 0,
"category": {
"id": 0,
"name": "string"
},
"name": "doggie",
"photoUrls": [
"string"
],
"tags": [
{
"id": 0,
"name": "string"
}
],
"status": "string"
}
2 回答
我的经验:
转到http://editor.swagger.io
文件 - >导入文件(加载我自己的Swagger描述)
生成客户端 - > Java(在我的例子中)
下载并解压缩客户端
使用您需要的数据导入's model package into any simple project, instantiate and fill model'的类
将实例化对象转换为JSON(我的情况 - Gson,因为生成的模型由Gson注释注释)
利润
简而言之:基于Swagger定义生成客户端(在我的情况下是java-client),填充它的模型并编组结果 .
Swagger Inflector库完全具有ExampleBuilder类用于此目的 . 它允许您从OpenAPI(Swagger)定义中的模型生成JSON,XML和YAML示例 .
上面的示例使用Swagger Java库1.x,它支持OpenAPI 2.0定义(
swagger: '2.0'
) .如果您的API定义是OpenAPI 3.0(
openapi: 3.0.0
),则需要使用Swagger Java库的2.x版本,并相应地更新导入和类名,例如:io.swagger.parser.SwaggerParser
→io.swagger.v3.parser.OpenAPIV3Parser
等