允许对象在swagger

时间:2017-09-27 11:30:56

标签: json api swagger swagger-2.0

我正在定义一个API,我有一个名为" payload"的字段。我们将此字段定义为

  

"输入":字符串

然而,在我们的招摇中,那些有效载荷数据开始具有结构。更具体地说,客户端发送json对象作为在某些规则中必须遵守的有效负载数据。例如,有效载荷可以是:

{
  "bark": true,
  "breed": "Dingo" 
}

如果有效负载是Dog对象或

{
  "hunts": true,
  "age": 13 
}

如果它是Cat对象。

所以在yaml文件中我最初有:

payload:
        $ref: "#/definitions/payloaddata" 

在定义区域我有:

payloaddata:
    type: "object"
    schema: 
      oneOf: 
        - $ref: '#/components/schemas/Cat'
        - $ref: '#/components/schemas/Dog'

组件定义为:

components:
  schemas:
    Dog:
      type: object
      properties:
        bark:
          type: boolean
        breed:
          type: string
          enum: [Dingo, Husky, Retriever, Shepherd]
    Cat:
      type: object
      properties:
        hunts:
          type: boolean
        age:
          type: integer

然而,yaml文件没有"编译"有了这个输入。任何想法如何做到这一点?

2 个答案:

答案 0 :(得分:1)

OpenAPI 3.0支持

oneOf,但OpenAPI / Swagger 2.0不支持。只要您的规范指定openapi: 3.0.0而不是swagger: '2.0',您发布的代码就可以了。您可能还需要更改规范中的其他内容,例如#/definitions/ - > #/components/schemas/...等。

答案 1 :(得分:0)

被接受的解决方案对我不起作用:独立于声明openapi: 3.0.0,模型定义没有编译。

但是,这个对我有用:

定义:

  TestModel:
    type: object
    oneOf:
      - $ref: '#/components/schemas/Foo'
      - $ref: '#/components/schemas/Bar'

模型用法:

testmodel:
  $ref: '#/components/schemas/TestModel'

希望对其他人有用。