Swagger 3.0 reDoc Дискриминатор JSON
В настоящее время я пишу документацию по swagger 3.0 и использую reDoc для визуализации для него приятного пользовательского интерфейса. У меня есть несколько сценариев в моей документации, где на основе предыдущего перечисления свойств я хотел бы отобразить различные свойства объекта схемы. К сожалению, я не могу понять, как правильно соединить это в моей документации. Пока у меня есть следующая конечная точка теста:
{
"post": {
"operationId" : "test",
"summary": "test",
"description": "test",
"tags": [ "test" ],
"consumes": "application/json",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"oneOf": [
{
"$ref": "./schemas/test1.json"
},
{
"$ref": "./schemas/test2.json"
}
],
"discriminator": {
"propertyName": "pet_type",
"mapping": {
"click": "./schemas/test1.json",
"open": "./schemas/test2.json"
}
}
}
}
}
},
"responses": {
"200": {
"description": "Success"
}
}
}
}
Test1.json выглядит так:
{
"Cat": {
"type": "object",
"properties": {
"pet_type": {
"type": "string"
},
"hunts": {
"type": "boolean"
},
"age": {
"type": "integer"
}
},
"discriminator": {
"propertyName": "pet_type"
}
}
}
И test2.json вот так:
{
"Dog": {
"type": "object",
"properties": {
"pet_type": {
"type": "string"
},
"bark": {
"type": "boolean"
},
"breed": {
"type": "string",
"enum": [
"Dingo",
"Husky",
"Retriever",
"Shepherd"
]
}
},
"discriminator": {
"propertyName": "pet_type"
}
}
}
Желаемым результатом будет переключение между двумя "тестовыми" jsons на основе enum (раскрывающийся список, видимый в образце reDoc). Чего мне не хватает, чтобы получить этот результат? Вы можете увидеть пример результата дискриминатора здесь под разделом функций (первый рисунок)
1 ответ
После дополнительных раскопок я смог выяснить проблему... мою структуру по большей части. В моем файле index.json я обновил раздел компонентов так, чтобы он указывал на папку компонентов, содержащую схему как таковую:
"components": {
"$ref": "./components/test.json"
},
Test.json выглядит следующим образом:
{
"schemas": {
"Refinance": {
"description": "A representation of a cat",
"allOf": [
{
"$ref": "#/schemas/Pet"
},
{
"type": "object",
"properties": {
"huntingSkill": {
"type": "string",
"description": "The measured skill for hunting",
"default": "lazy",
"enum": [
"clueless",
"lazy",
"adventurous",
"aggressive"
]
}
},
"required": [
"huntingSkill"
]
}
]
},
"Purchase": {
"description": "A representation of a dog",
"allOf": [
{
"$ref": "#/schemas/Pet"
},
{
"type": "object",
"properties": {
"packSize": {
"type": "integer",
"format": "int32",
"description": "The size of the pack the dog is from",
"default": 1,
"minimum": 1
},
"foobar": {
"type": "string",
"description": "some ol bullshit"
}
},
"required": [
"packSize"
]
}
]
},
"Pet": {
"type": "object",
"discriminator": {
"propertyName": "petType"
},
"properties": {
"petType": {
"description": "Type of a pet",
"type": "string"
}
},
"xml": {
"name": "Pet"
}
}
}
}
И, наконец, схема для конечной точки ссылается следующим образом:
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "../../index.json#/components/schemas/Pet"
}
}
}
},