跳转到主要内容
当你的 API 接受多种数据格式、包含条件字段或采用继承模式时,OpenAPI 的模式组合关键字可帮助你为这些灵活的结构编写文档。通过 oneOfanyOfallOf,你可以描述能够处理不同输入类型,或将多个模式组合为完整数据模型的 API。

oneOfanyOfallOf 关键字

对于复杂数据类型,OpenAPI 提供了用于组合模式的关键字:
  • allOf:组合多个模式(类似合并对象或扩展基础模式),相当于 and 运算符。
  • anyOf:接受与提供的任一模式匹配的数据,相当于 or 运算符。
  • oneOf:仅接受与提供的模式中恰好一个匹配的数据,相当于“异或”运算符。
Mintlify 将 oneOfanyOf 视为相同处理,因为在实际使用 API 时两者的差异很少产生影响。
有关这些关键字的详细规范,请参阅 OpenAPI 文档
目前不支持 not 关键字。

使用 allOf 组合模式

当你使用 allOf 时,Mintlify 会对你的 OpenAPI 文档进行预处理,以更易读的方式展示复杂组合。例如,当你用 allOf 组合两个对象模式时,Mintlify 会将两者的属性合并为一个对象。这在利用 OpenAPI 的可复用组件时尤其有用。
org_with_users:
  allOf:
    - $ref: '#/components/schemas/Org'
    - type: object
      properties:
        users:
          type: array
          description: 包含该组织所有用户的数组
# ...
components:
  schemas:
    Org:
      type: object
      properties:
        id:
          type: string
          description: 组织的 ID
org_with_users
object

使用 oneOfanyOf 提供选项

当你使用 oneOfanyOf 时,选项会显示在带有选项卡的容器中。请在每个子架构中指定一个 title 字段,为这些选项命名。例如,下面展示了如何显示两种不同类型的收货地址:
delivery_address:
  oneOf:
    - title: 街道地址
      type: object
      properties:
        address_line_1:
          type: string
          description: 收件人的街道地址
        # ...
    - title: 邮政信箱
      type: object
      properties:
        box_number:
          type: string
          description: 邮政信箱编号
        # ...
delivery_address
object
  • StreetAddress
  • POBox
address_line_1
string
住址的街道与门牌