Czy istnieje sposób zdefiniowania typu HashMap lub Rodzaju ogólnego w sekcji modeli? Mam usługę REST, która zwraca produkty, a te produkty mogą mieć różne opcje. Właściwość options to w zasadzie HashMap, gdzie id to nazwa opcji, a jej wartość to wartość opcji.Swagger HashMap typ właściwości
Odpowiedz
Tak, to możliwe.
W OpenAPI (. FKA Swagger) 2,0 i 3,0, HashMap jest zawsze <string, something>
mapa:
- Kluczem jest zawsze ciągiem i nie muszą być zdefiniowane.
- Typ wartości jest tym, czego potrzebujesz i jest zdefiniowany za pomocą
additionalProperties
.
Powiedzmy chcesz opisać <string, string>
HashMap jak ten:
{
"key1": "value1",
"key2": "value2"
}
Odpowiednia definicja OpenAPI 2.0 będzie:
definitions:
StringStringMap:
type: object
additionalProperties:
type: string
W OpenAPI 3,0 definicja będzie:
components:
schemas:
StringStringMap:
type: object
additionalProperties:
type: string
<string, object>
HashMap jak ten
{
"key1": {"someData": "data", "someOtherData": true},
"key2": {"someData": "data2", "someOtherData": false}
}
zostaną określone w ten sposób w OpenAPI 2.0:
definitions:
ComplexObject:
type: object
properties:
someData:
type: string
someOtherData:
type: boolean
StringObjectMap:
type: object
additionalProperties:
$ref: "#/definitions/ComplexObject"
aw OpenAPI 3,0:
components:
schemas:
ComplexObject:
type: object
properties:
someData:
type: string
someOtherData:
type: boolean
StringObjectMap:
type: object
additionalProperties:
$ref: "#/definitions/ComplexObject"
Właśnie to omówione w głębi w part 4 of my OpenAPI (fka Swagger tutorial).
The OpenAPI (fka. Swagger) specification explains briefly this too.
Jest to pomocne i działa, jeśli struktura danych dla wszystkich wartości jest typu ComplexObject. Mam jednak scenariusz, w którym struktura wartości zmienia się w zależności od wzoru klucza. W JSON Schema mogłem to wyrazić za pomocą właściwości patternProperties. Wszelkie przemyślenia na temat tego, jak można to wyrazić w usłudze OAS/Swagger? –
Używam Swagger 2.0. Chcę uzyskać
Jakiego smaku Swagger używasz? (jax-rs, play, itp.) – Eyal
@Eyal: Używamy metody swagger-ui i mamy ten sam problem. Czy masz rozwiązanie lub obejście problemu? –
@JanHartung Nie, nie mamy zbyt wielu map w naszym api ... możesz chcieć zasubskrybować [to żądanie funkcji w systemie śledzenia problemów swagger.] (Https://github.com/wordnik/swagger- core/issues/244) – Eyal