You*_*iga 9 json swagger swagger-2.0 openapi swagger-codegen
我正在为具有 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)
我想生成随机数据并得到如下内容:
{
"id": 0,
"category": {
"id": 0,
"name": "string"
},
"name": "doggie",
"photoUrls": [
"string"
],
"tags": [
{
"id": 0,
"name": "string"
}
],
"status": "string"
}
Run Code Online (Sandbox Code Playgroud)
该扬鞭变形器库具有ExampleBuilder类正是为了这个目的。它允许您从 OpenAPI (Swagger) 定义中的模型生成 JSON、XML 和 YAML 示例。
import io.swagger.parser.SwaggerParser;
import io.swagger.models.*;
import io.swagger.inflector.examples.*;
import io.swagger.inflector.examples.models.Example;
import io.swagger.inflector.processors.JsonNodeExampleSerializer;
import io.swagger.util.Json;
import io.swagger.util.Yaml;
import java.util.Map;
import com.fasterxml.jackson.databind.module.SimpleModule;
...
// Load your OpenAPI/Swagger definition
Swagger swagger = new SwaggerParser().read("http://petstore.swagger.io/v2/swagger.json");
// Create an Example object for the Pet model
Map<String, Model> definitions = swagger.getDefinitions();
Model pet = definitions.get("Pet");
Example example = ExampleBuilder.fromModel("Pet", pet, definitions, new HashSet<String>());
// Another way:
// Example example = ExampleBuilder.fromProperty(new RefProperty("Pet"), swagger.getDefinitions());
// Configure example serializers
SimpleModule simpleModule = new SimpleModule().addSerializer(new JsonNodeExampleSerializer());
Json.mapper().registerModule(simpleModule);
Yaml.mapper().registerModule(simpleModule);
// Convert the Example object to string
// JSON example
String jsonExample = Json.pretty(example);
System.out.println(jsonExample);
// YAML example
String yamlExample = Yaml.pretty().writeValueAsString(example);
System.out.println(yamlExample);
// XML example (TODO: pretty-print it)
String xmlExample = new XmlExampleSerializer().serialize(example);
System.out.println(xmlExample);
Run Code Online (Sandbox Code Playgroud)
上面的示例使用 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, 等等。
小智 3
我的经验:
简而言之:根据 Swagger 定义生成客户端(在我的例子中为 java-client),填充其模型并编组结果。
| 归档时间: |
|
| 查看次数: |
18166 次 |
| 最近记录: |