Мне нужно документировать с помощью Swagger API, который использует как ввод, так и вывод карты объектов, индексированных строковыми ключами.
Пример:
{
"a_property": {
"foo": {
"property_1": "a string 1",
"property_2": "a string 2"
},
"bar": {
"property_1": "a string 3",
"property_2": "a string 4"
}
}
}
«foo» и «bar» могут быть любыми строковыми ключами, но они должны быть уникальными среди набора ключей.
Я знаю, что с помощью Swagger я могу определить массив объектов, но это дает другой API, поскольку тогда у нас будет что-то вроде:
{
"a_property": [
{
"key": "foo"
"property_1": "a string 1",
"property_2": "a string 2"
},
{
"key": "bar"
"property_1": "a string 3",
"property_2": "a string 4"
}
]
}
Я прочитал «Спецификацию открытого API» - «Добавить поддержку для типов данных карты №38» страница. Насколько я понимаю, он рекомендует использовать additionalProperties, но, похоже, это не отвечает моим потребностям (или не работает с Swagger UI 2.1.4, который я использую). Я что-то пропустил?
Пока что я нашел следующий обходной путь (в Swagger JSON):
a_property: {
description: "This is a map that can contain several objects indexed by different keys.",
type: object,
properties: {
key: {
description: "map item",
type: "object",
properties: {
property_1: {
description: "first property",
type: string
},
property_2: {
description: "second property",
type: string
}
}
}
}
}
Это почти выполняет свою работу, но читатель должен понимать, что «ключ» может быть любой строкой и может повторяться несколько раз.
Есть ли лучший способ достичь того, что мне нужно?
additionalProperties
- правильный ответ: stackoverflow.com/a/41240118/ 110488 - person Chen Levy   schedule 20.12.2016