2017-09-27 130 views
1

我正在定义一个API,并且我有一个名为“有效内容”的字段。我们有这个字段定义为允许某个对象在某处放置一些类型

“类型”:字符串

我们招摇但是开始的有效载荷数据有结构。更特别的是,客户端发送json对象作为必须遵守某些规则的有效载荷数据。例如有效载荷可以是:

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

如果有效载荷是一个Dog对象或

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

如果它是一个猫的对象。

所以在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文件不会使用此输入“编译”。任何想法如何做到这一点?

+0

是你的规格OpenAPI/Swagger 2.0或OpenAPI 3.0? 'oneOf'仅在3.0中受支持。 – Helen

+0

增加了swagger:文件顶部的“3.0”。我在editor.swagger.io工作 – cateof

+0

是否有可能停留在2.0并允许参数具有多个类型作为值? editor.swagger dot io不支持“3.0” – cateof

回答

1

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

+0

我花费了太多时间直到找到答案...谢谢! –