允许对象具有 swagger 中的某些类型之一

cat*_*eof 7 api json swagger swagger-2.0

我正在定义一个 API,并且有一个名为“payload”的字段。我们将该字段定义为

“类型”:字符串

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

{
  "bark": true,
  "breed": "Dingo" 
}
Run Code Online (Sandbox Code Playgroud)

如果有效负载是 Dog 对象或

{
  "hunts": true,
  "age": 13 
}
Run Code Online (Sandbox Code Playgroud)

如果它是一个 Cat 对象。

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

payload:
        $ref: "#/definitions/payloaddata" 
Run Code Online (Sandbox Code Playgroud)

在定义区域我有:

payloaddata:
    type: "object"
    schema: 
      oneOf: 
        - $ref: '#/components/schemas/Cat'
        - $ref: '#/components/schemas/Dog'
Run Code Online (Sandbox Code Playgroud)

组件定义为:

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
Run Code Online (Sandbox Code Playgroud)

但是,yaml 文件不会使用此输入“编译”。有什么想法如何做到这一点?

Not*_*nka 6

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

然而,这对我有用:

定义:

  TestModel:
    type: object
    oneOf:
      - $ref: '#/components/schemas/Foo'
      - $ref: '#/components/schemas/Bar'
Run Code Online (Sandbox Code Playgroud)

型号用途:

testmodel:
  $ref: '#/components/schemas/TestModel'
Run Code Online (Sandbox Code Playgroud)

希望它对其他人有用。


Hel*_*len 5

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