OpenAPI数组内的多种类型

时间:2017-12-05 15:08:03

标签: swagger swagger-ui openapi

我无法使用OpenAPI 3定义可重用的模式组件,这将允许包含多种类型的数组。每个项类型都继承自同一父类,但具有特定的子属性。这似乎在SwaggerHub的model视图中正常工作,但示例视图未正确显示数据。

TLDR; 有没有办法在OpenAPI 3中定义包含不同对象类型的数组?

Response:
  allOf:
    - $ref: '#/components/schemas/BaseResponse'
    - type: object
      title: A full response
      required:
      - things
      properties:
        things:
          type: array
          items:
            anyOf:
              - $ref: '#/components/schemas/ItemOne'
              - $ref: '#/components/schemas/ItemTwo'
              - $ref: '#/components/schemas/ItemThree'

1 个答案:

答案 0 :(得分:6)

您的规格是正确的。只是Swagger UI尚不支持oneOfanyOf模式的示例渲染。您可以跟踪这些问题以获取状态更新:

OAS 3.0 Support Backlog
Multiple responses using oneOf attribute do not appear in UI

解决方法是在example / oneOf架构旁边手动添加anyOf或父架构:

        things:
          type: array
          items:
            anyOf:
              - $ref: '#/components/schemas/ItemOne'
              - $ref: '#/components/schemas/ItemTwo'
              - $ref: '#/components/schemas/ItemThree'
          # Note that array example is on the same
          # level as `type: array`
          example:
            - foo: bar        # Example of ItemOne
              baz: qux
            - "Hello, world"  # Example of ItemTwo
            - [4, 8, 15, 16, 23, 42]  # Example of ItemThree