我正在定义一个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文件没有"编译"有了这个输入。任何想法如何做到这一点?
答案 0 :(得分:1)
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'
希望对其他人有用。