如何生成的OpenAPI /扬鞭模型定义JSON的例子吗?

问题描述 投票:2回答:2

我建立一个REST API具有提供的OpenAPI(扬鞭)定义一个模糊器。

我想测试向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"
}
json swagger swagger-2.0 swagger-codegen openapi
2个回答
3
投票

Swagger Inflector库具有ExampleBuilder类正是为了这个目的。它可以让你产生提供的OpenAPI(扬鞭)定义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);

上面的示例使用扬鞭Java库1.x中,它们支持的OpenAPI 2.0定义(swagger: '2.0')。

如果您的API定义的OpenAPI 3.0(openapi: 3.0.0),则需要适当地使用扬鞭Java库的版本2.x和更新的进口和类名,例如io.swagger.parser.SwaggerParserio.swagger.v3.parser.OpenAPIV3Parser


1
投票

我的经验:

  1. http://editor.swagger.io
  2. 文件 - >导入文件(可以加我自己扬鞭说明)
  3. 生成客户端 - > Java的(对我来说)
  4. 下载并解压缩客户端
  5. 导入它的模型封装成任何简单的项目,实例化和填充模型的班,你需要的数据
  6. 马歇尔的实例化的对象为JSON(我的情况 - GSON,因为生成的模型是由GSON注解)
  7. 利润

总之:基于扬鞭定义生成客户端(在我的情况Java的客户端),填充它的模型和编组的结果。

© www.soinside.com 2019 - 2024. All rights reserved.