如何解决如何在openApi项目中的requestBody对象上指定必需的属性?
我有一个openapi项目的yaml文件,看起来像这样...
data2 should output: value=first_name=Foo&last_name=Bar
我想知道:
有没有一种方法可以配置它,以便在创建“事物”时,所需属性的列表与“更新”事物时的属性列表不同? (如果我将'required'定义添加到组件中,它将对所有路径产生相同的影响。)
例如,在创建事物时,可能需要prop1,prop2和prop3。但是在更新事物时,可能只需要prop1。
谢谢!
解决方法
您可以通过为“更新”和“创建”使用特定对象来实现此目的,这些对象继承自 Thing
并施加您需要的限制:
Thing:
type: object
required:
- id
additionalProperties: false
properties:
id:
type: integer
prop1:
type: string
prop2:
type: string
prop3:
type: string
ThingUpdate:
allOf:
- $ref: '#/components/schemas/Thing'
minProperties: 2
ThingCreate:
allOf:
- $ref: '#/components/schemas/Thing'
required:
- prop1
- prop2
- prop3
您显然需要修改您的 POST /things
端点以在请求正文中采用 ThingUpdate
而不仅仅是 Thing
,同样对于 PUT /things/{id}
和 {{1 }}。
要完成“更新”验证,请注意在 ThingCreate
基础对象中我指定了 Thing
,在 additionalProperties: false
中我指定了 ThingUpdate
;强制要求在“事物”中至少有 2 个属性,除了 minProperties: 2
、id
、prop1
和 prop2
(我假设 {{ 1}} 是必需的,所以我把它放在 prop3
的顶部)。
对于“创建”验证,我只是从 id
基类继承并指定所有非 Thing
属性都是必需的。
此处的 Thing
参数有一些冗余,因为“创建”不需要它,而对于“更新”,它在路径中而不是在请求正文中指定。您可以从 id
基础对象中删除 id
,并将 id
中的 Thing
修改为 minProperties
。然后,假设您打算添加一个单独的 ThingUpdate
端点,您想从数据库或任何地方检索所有 1
,您可以创建一个单独的派生对象 GET /things
,其中包括 {{1 }} Thing
并添加额外的 ThingGet
属性(在 allOf:
对象下)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。