2013-04-16 8 views
9

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

+0

Quale sapore di Swagger stai usando? (jax-rs, play, ecc.) – Eyal

+0

@Eyal: Usiamo swagger-ui e abbiamo lo stesso problema. Hai una soluzione o una soluzione? –

+0

@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

risposta

6

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.

+0

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? –

+0

Sto usando lo swagger 2.0. Voglio ottenere >. Come possiamo ottenere questo tipo di risposta? – Prabhath