在OpenAPI中,如何将引用模式的某些字段设为必填?

Ruf*_*us7 5 openapi

我已经定义了模型 A,它有两个字段,field1这是必需的。

A:
 type: object
 required:
  - field1
 properties:
  field1:
    type: string
  field2:
    type: string
Run Code Online (Sandbox Code Playgroud)

我想创建一个新的模式 B,它具有与 A 相同的字段,但这两个字段都是必需的。

我可以这样写吗?

B:
  allOf:
   - $ref: '#/components/schemas/A'
   - type: object
     required:
     - field2

Run Code Online (Sandbox Code Playgroud)

Hel*_*len 8

是的,你就是这样做的。请注意,您不需要type: object在架构 B 中指定,因为它type已经在“父”架构 A 中定义。

B:
  allOf:
   - $ref: '#/components/schemas/A'
   - required:
     - field2
Run Code Online (Sandbox Code Playgroud)

required也可以放在旁边allOf而不是作为子模式:

B:
  allOf:
   - $ref: '#/components/schemas/A'
  required:
   - field2
Run Code Online (Sandbox Code Playgroud)

在OpenAPI 3.1中,$ref模式中允许使用同级关键字,因此以下内容将起作用:

B:
  $ref: '#/components/schemas/A'
  required:
   - field2
Run Code Online (Sandbox Code Playgroud)