Swagger:如何让属性引用OpenAPI 2.0中的模型(即,嵌套模型)?

我很难弄清楚如何在OpenAPI 2.0中嵌套模型。

目前有:

SomeModel:
 properties:
   prop1:
     type: string
   prop2:
     type: integer
   prop3:
     type:
       $ref: OtherModel

OtherModel:
  properties:
    otherProp:
      type: string   

我尝试了许多其他方式:

prop3:
  $ref: OtherModel
# or
prop3:
  schema:
    $ref: OtherModel
# or
prop3:
  type:
    schema:
      $ref: OtherModel

以上似乎都不起作用。

但是,使用数组可以正常工作:

prop3:
  type: array
  items:
    $ref: OtherModel
22
投票

在OpenAPI 2.0中对其建模的正确方法是:

swagger: '2.0'
...

definitions:
  SomeModel:
    type: object
    properties:
      prop1:
        type: string
      prop2:
        type: integer
      prop3:
        $ref: '#/definitions/OtherModel'   # <-----

  OtherModel:
    type: object
    properties:
      otherProp:
        type: string

如果使用OpenAPI 3.0,则模型位于components/schemas而不是definitions

openapi: 3.0.1
...

components:
  schemas:
    SomeModel:
      type: object
      properties:
        prop1:
          type: string
        prop2:
          type: integer
        prop3:
          $ref: '#/components/schemas/OtherModel'   # <-----

    OtherModel:
      type: object
      properties:
        otherProp:
          type: string

由于其他关键字type: object,因此请记住将type is not inferred添加到对象模式。