2013-04-16 16 views
9

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

+0

Jakiego smaku Swagger używasz? (jax-rs, play, itp.) – Eyal

+0

@Eyal: Używamy metody swagger-ui i mamy ten sam problem. Czy masz rozwiązanie lub obejście problemu? –

+0

@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

Odpowiedz

6

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.

+0

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

+0

Używam Swagger 2.0. Chcę uzyskać > .Jak możemy uzyskać tego typu odpowiedź? – Prabhath