C'è un modo per definire un HashMap o di tipo generico oggetto nella sezione modelli? Ho un servizio REST che restituisce prodotti e tali prodotti possono avere opzioni diverse. La proprietà options è fondamentalmente una HashMap, dove id è il nome dell'opzione e il suo valore è il valore dell'opzione.Swagger HashMap proprietà type
risposta
sì è possibile.
In OpenAPI (. Fka Swagger) 2.0 e 3.0, una HashMap è sempre una mappa <string, something>
:
- La chiave è sempre una stringa e non hanno bisogno di essere definito.
- Il tipo di valore è quello che vuoi e viene definito con
additionalProperties
.
Diciamo che si vuole descrivere un <string, string>
hashmap come questo:
{
"key1": "value1",
"key2": "value2"
}
La definizione OpenAPI 2.0 corrispondente sarà:
definitions:
StringStringMap:
type: object
additionalProperties:
type: string
Nel OpenAPI 3.0 la definizione sarà:
components:
schemas:
StringStringMap:
type: object
additionalProperties:
type: string
Un <string, object>
hashmap come questo
{
"key1": {"someData": "data", "someOtherData": true},
"key2": {"someData": "data2", "someOtherData": false}
}
sarà definito in questo modo nel OpenAPI 2.0:
definitions:
ComplexObject:
type: object
properties:
someData:
type: string
someOtherData:
type: boolean
StringObjectMap:
type: object
additionalProperties:
$ref: "#/definitions/ComplexObject"
e in OpenAPI 3.0:
components:
schemas:
ComplexObject:
type: object
properties:
someData:
type: string
someOtherData:
type: boolean
StringObjectMap:
type: object
additionalProperties:
$ref: "#/definitions/ComplexObject"
Ho appena coperto questo in profondità in part 4 of my OpenAPI (fka Swagger tutorial).
Il OpenAPI (fka. Swagger) specification explains briefly this too.
Questo è utile e funziona se la struttura dei dati per i valori è interamente di tipo ComplexObject. Tuttavia, ho uno scenario in cui la struttura dei valori varia a seconda del modello della chiave. In JSON Schema, potrei esprimerlo facilmente usando patternProperties. Qualche idea su come si potrebbe esprimere questo in OAS/Swagger? –
Sto usando lo swagger 2.0. Voglio ottenere
Quale sapore di Swagger stai usando? (jax-rs, play, ecc.) – Eyal
@Eyal: Usiamo swagger-ui e abbiamo lo stesso problema. Hai una soluzione o una soluzione? –
@JanHartung No, non abbiamo troppe mappe nelle nostre API ... si potrebbe desiderare di iscriversi a [tale richiesta funzionalità nel sistema di tracciamento problema spavalderia.] (Https://github.com/wordnik/swagger- core/issues/244) – Eyal