我有一个看起来像这样的回应:
{
resources: [ { arbitraryObject} ]
}
字符串
因此,我希望在响应部分为端点定义一个arbitraryObject
:
对于我的openapi 3.0模式,使用#/components/schemas/Resources
来区分/cats
端点的cat列表。以下是我目前为止的模式:
paths:
/cats:
get:
responses:
"200":
description: "Gets all the cats"
content:
application/json:
# use the discriminator column here to get a list of cats using the $ref: "#/components/schemas/Resources"
components:
schemas:
Resources:
type: object
properties:
resources:
type: array
items:
properties:
objectType:
type: string
discriminator:
propertyName: objectType
Cat:
type: object
properties:
objectType:
type: string
default: "Cat"
example: "Cat"
Dog:
type: object
properties:
objectType:
type: string
default: "Dog"
example: "Dog"
型
我问过ChatGPT,它想让我定义一个像这样的猫列表:
Cat:
type: object
allOf:
- $ref: '#/components/schemas/Resources'
- properties:
objectType:
type: string
default: "Cat"
example: "Cat"
型
但是这需要我为Cat
、Dog
等的每个列表创建一个新的模式,所以我必须创建一个DogList
、CatList
等,以及单独的Cat
和Dog
,这是不切实际的。
我希望能够重用Responses
、Cat
和Dog
来创建单个Cat
和Dog
以及Cat
和Dog
的列表。
1条答案
按热度按时间qhhrdooz1#
我不明白这是怎么回事。
理由:
objectType
数据字段绑定到每个单独的对象(列表项)。因此对于/cats
端点,狗列表或猫和狗的混合列表也将对模式有效,除非您显式地将objectType
作为列表级别(而不是列表项级别)的模式中的可见数据字段。我认为更好的设计是像这样显式地将
objectType
绑定到整个列表:字符串
这当然不同于您的响应示例-您可以选择更改此选项吗?