当你的 API 接受多种数据格式、包含条件字段或采用继承模式时,OpenAPI 的 schema 组合关键字可以帮助你记录这些灵活的结构。通过使用 oneOf、anyOf 和 allOf,你可以描述既能处理不同输入类型、又能将多个 schema 组合成完整数据模型的 API。
对于复杂数据类型,OpenAPI 提供了用于组合 schema 的关键字:
allOf:将多个 schema 组合在一起(类似合并对象或扩展基础 schema)。作用相当于 and 运算符。
anyOf:接受与提供的任一 schema 匹配的数据。作用相当于 or 运算符。
oneOf:只接受与提供的 schema 中恰好一个匹配的数据。作用相当于 exclusive-or 运算符。
Mintlify 会将 oneOf 和 anyOf 以相同方式处理,因为二者在实际使用 API 时的差异很少产生影响。
有关这些关键字的详细规范,请参见 OpenAPI 文档。
当你使用 allOf 时,Mintlify 会对你的 OpenAPI 文档进行一些预处理,以便以更易读的方式展示复杂的组合。例如,当你用 allOf 组合两个对象 schema 时,Mintlify 会将两者的属性合并为一个对象。当你利用 OpenAPI 的可复用 components 时,这一点尤其有用。
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
当你使用 oneOf 或 anyOf 时,选项会显示在标签页容器中。请在每个子架构中指定一个 title 字段,为各个选项命名。例如,以下演示如何展示两种不同类型的送货地址:
delivery_address:
oneOf:
- title: StreetAddress
type: object
properties:
address_line_1:
type: string
description: 收件人的街道地址
# ...
- title: POBox
type: object
properties:
box_number:
type: string
description: 邮政信箱的号码
# ...