Apidog Docs
🇨🇳 简体中文
  • 🇺🇸 English
  • 🇯🇵 日本語
  • 🇪🇸 Español
  • 🇰🇷 한국인
  • 🇨🇳 简体中文
  • 🇵🇹 Português (Portugal)
  • 🇮🇩 Bahasa Indonesia
  • 🇧🇷 Português (Brasil)
  • 🇻🇳 Tiếng Việt
  • 🇨🇳 繁體中文
🇨🇳 简体中文
  • 🇺🇸 English
  • 🇯🇵 日本語
  • 🇪🇸 Español
  • 🇰🇷 한국인
  • 🇨🇳 简体中文
  • 🇵🇹 Português (Portugal)
  • 🇮🇩 Bahasa Indonesia
  • 🇧🇷 Português (Brasil)
  • 🇻🇳 Tiếng Việt
  • 🇨🇳 繁體中文
🇨🇳 简体中文
  • 🇺🇸 English
  • 🇯🇵 日本語
  • 🇪🇸 Español
  • 🇰🇷 한국인
  • 🇨🇳 简体中文
  • 🇵🇹 Português (Portugal)
  • 🇮🇩 Bahasa Indonesia
  • 🇧🇷 Português (Brasil)
  • 🇻🇳 Tiếng Việt
  • 🇨🇳 繁體中文
HomeLearning Center
Support CenterAPI ReferencesDownloadChangelog
HomeLearning Center
Support CenterAPI ReferencesDownloadChangelog
  1. Schemas
  • Apidog 学习中心
  • 入门
    • Apidog 简介
    • Apidog 中的基本概念
    • 导航 Apidog
    • 快速开始
      • 概述
      • 创建端点
      • 发送请求
      • 添加断言
      • 创建测试场景
      • 共享 API 文档
      • 探索更多
    • 迁移到 Apidog
      • 概述
      • 手动导入
      • 定时导入(绑定数据源)
      • 导入选项
      • 导出数据
      • 导入自
        • 从 Postman 导入
        • 导入 OpenAPI 规范
        • 导入 cURL
        • 导入 Markdown
        • 从 Insomnia 导入
        • 从 apiDoc 导入
        • 导入 .har 文件
        • 导入 WSDL
  • Mock API 数据
    • 概述
    • Smart Mock
    • 自定义模拟
    • 模拟优先级顺序
    • 模拟脚本
    • 云端模拟
    • 自托管 Runner 模拟
    • 模拟语言(区域设置)
  • 账号与偏好设置
    • 账户设置
    • 生成 OpenAPI 访问令牌
    • 通知
    • 语言设置
    • 快捷键
    • 网络代理配置
    • 备份数据
    • 更新 Apidog
    • 删除账户
    • 实验性功能
  • 发送请求
    • 概述
    • SSE 调试
    • MCP 客户端
    • Socket.IO
    • WebSocket
    • Webhook
    • SOAP 或 WebService
    • GraphQL
    • gRPC
    • 使用请求代理 Agent 进行调试
    • 创建请求
      • 请求历史
      • 请求基础
      • 参数和主体
      • 请求头部
      • 请求设置
      • 调试请求
      • 将请求保存为端点
      • HTTP/2
    • 身份验证与授权
      • 概述
      • CA 和客户端证书
      • 授权类型
      • Digest Auth
      • OAuth 1.0
      • OAuth 2.0
      • Hawk 身份验证
      • Kerberos
      • NTLM
      • Akamai EdgeGrid
    • 响应和 Cookie
      • 查看 API 响应
      • 管理 Cookie
      • 概述
  • 开发和调试 API
    • 概述
    • 生成请求
    • 发送请求
    • 调试用例
    • 测试用例
    • 动态值
    • 验证响应
    • Design-First vs Request-First
    • 生成代码
    • 环境与变量
      • 概览
      • 使用变量
      • 环境管理
    • Vault 密钥
      • 概述
      • HashiCorp Vault
      • Azure Key Vault
      • AWS Secrets Manager
    • 动态值模块
      • Airline
      • 动物
      • 颜色
      • 商务
      • Company
      • 数据库
      • 数据类型
      • 日期
      • Finance
      • 食物
      • Git
      • Hacker
      • Helpers
      • 图像
      • Internet
      • 位置
      • Lorem
      • 音乐
      • 数字
      • Person
      • 电话
      • 科学
      • String
      • System
      • Vehicle
      • Word
    • 前置和后置处理器
      • 概述
      • 断言
      • 提取变量
      • 等待
      • 安全
      • 数据库操作
        • 概述
        • MySQL
        • MongoDB
        • Redis
        • Oracle 客户端
      • 使用脚本
        • 概述
        • 预处理器脚本
        • 后处理器脚本
        • 公共脚本
        • Postman 脚本参考
        • 调用其他编程语言
        • 使用 JS 库
        • 可视化响应
        • 脚本示例
          • 断言脚本
          • 使用变量
          • 修改请求
          • 其他示例
    • API 调试
      • AI Agent Debugger
      • A2A 调试器
  • 设计 API
    • 概述
    • 创建新的 API 项目
    • 端点基础
    • API 设计指南
    • 模块
    • 配置多个请求主体示例
    • 组件
    • 通用字段
    • 全局参数
    • 端点变更历史
    • 评论
    • 批量端点管理
    • 自定义协议 API
    • Spec-first 模式(Beta)
    • 安全方案
      • 概述
      • 创建安全方案
      • 使用安全方案
      • 在线文档中的安全方案
    • 高级功能
      • 自定义端点字段
      • 关联的测试场景
      • 端点状态
      • 参数列表的外观
      • 端点唯一标识
    • Schemas
      • 概述
      • 创建新 Schema
      • 构建 Schema
      • 从 JSON 等生成 Schema
      • oneOf, allOf, anyOf
      • 使用 Discriminator
  • Apidog Europe
    • Apidog Europe
  • API 测试
    • 概述
    • 测试场景
      • 创建测试场景
      • 在请求之间传递数据
      • 流程控制条件
      • 从端点和端点用例同步数据
      • 从其他项目导入端点和端点用例
      • 导出测试场景
    • 测试报告
      • 测试报告
    • 运行测试场景
      • 运行测试场景
      • 批量运行测试场景
      • 数据驱动测试
      • 共享测试数据
      • 定时任务
      • 管理来自其他项目的 API 运行环境
    • 测试套件
      • 概述
      • 创建测试套件
      • 编排测试套件
      • 本地运行测试套件
      • 通过 CLI 运行测试套件
      • 定时任务
    • 测试 API
      • 集成测试
      • 性能测试
      • 端到端测试
      • 回归测试
      • 契约测试
    • Apidog CLI
      • 概述
      • 安装和运行 Apidog CLI
      • Apidog CLI 选项
    • CI/CD
      • 概述
      • 与 Github Actions 集成
      • 与 Gitlab 集成
      • 与 Jenkins 集成
      • 通过 Git Commit 触发测试
  • 发布 API 文档
    • 概述
    • 支持的 API 技术
    • 快速分享
    • 查看 API 文档
    • Markdown 文档
    • 发布文档站点
    • 自定义登录页面
    • 自定义布局
    • 自定义 CSS、JavaScript、HTML
    • 自定义域名
    • AI 功能
    • SEO 设置
    • 高级设置
      • 文档搜索
      • CORS 代理
      • 集成 Google Analytics
      • 文件夹树设置
      • 可见性设置
      • 在文档 URL 中嵌入值
    • API 版本
      • 概述
      • 创建 API 版本
      • 发布 API 版本
      • 共享带有 API 版本的端点
  • 分支
    • 概述
    • 创建 Sprint 分支
    • 在分支中测试 API
    • 在分支中设计 API
    • 合并 Sprint 分支
    • 管理 Sprint 分支
    • AI Branch(Beta)
  • AI 功能
    • 概述
    • 启用 AI 功能
    • 生成测试用例
    • 使用 AI 修改 Schema
    • 端点合规性检查
    • API 文档完整性检查
    • AI 驱动的字段命名
    • 常见问题
  • Apidog MCP 服务器
    • 概述
    • 将 Apidog 项目连接到 AI
    • 将已发布的文档连接到 AI
    • 将 OpenAPI 文件连接到 AI
  • 最佳实践
    • 处理 API 签名
    • 访问受 OAuth 2.0 保护的 API
    • 协作工作流
    • 管理身份验证状态
  • 离线空间
    • 概述
  • 管理
    • 管理项目
      • 管理项目
      • 通知设置
      • 管理项目成员
      • 项目资源
        • 数据库连接
        • Git 连接
    • 管理团队
      • 管理团队
      • 管理团队成员
      • 团队活动
      • 团队角色与权限
      • 团队资源
        • General Runner
        • 团队变量
        • 请求代理 Agent
      • 实时协作
        • 团队协作
    • 入门检查清单
      • 基本概念
      • 入门指南
    • 管理组织
      • 管理组织
      • 组织角色与权限
      • 套餐管理
        • 组织中的账单管理员
      • 单点登录 (SSO)
        • SSO 概述
        • 配置 Microsoft Entra ID
        • 配置 Okta
        • 为组织配置 SSO
        • 管理用户账户
        • 将组映射到团队
      • SCIM 配置
        • SCIM 预配简介
        • Microsoft Entra ID
        • Okta
      • 组织资源
        • 自托管 Runner
  • 计费
    • 概述
    • 积分
    • 升级您的套餐
    • 替代支付方式
    • 管理订阅
    • 将付费团队移入组织
  • 附加组件
    • API Hub
    • Apidog Intellij IDEA 插件
    • 浏览器扩展
      • Chrome
      • Microsoft Edge
    • 请求代理
      • Web 中的请求代理
      • 共享文档中的请求代理
      • 客户端中的请求代理
  • 数据与安全
    • 数据存储和安全
    • 用户数据隐私与安全
    • 请求路由与数据安全
  • 参考
    • API 设计优先方法
    • Apidog OpenAPI 规范扩展
    • JSONPath
    • XPath
    • 正则表达式
    • JSON Schema
    • CSV 文件格式
    • 安装 Java 环境
    • Runner 部署环境
    • Apidog Markdown 语法
    • Apidog Swagger 扩展
      • 概述
      • x-apidog-folder
      • x-apidog-status
      • x-apidog-name
      • x-apidog-maintainer
    • Apidog JSON Schema 扩展
      • 概述
      • x-apidog-mock
      • x-apidog-orders
      • x-apidog-enum
  • 支持中心
  1. Schemas

oneOf, allOf, anyOf

oneOf、anyOf 和 allOf 是 JSON Schema 规范中的关键字,用于定义组合数据结构。它们本质上是应用于数据验证的逻辑运算符。Apidog 完全支持这些 JSON Schema 特性,帮助你构建更准确的 API 文档和数据验证规则。

基本概念#

allOf
allOf 表示数据必须同时满足所有子 Schema 条件,等同于逻辑运算中的 AND 操作。就像日常语言中的“既……又……”,所有条件都必须同时满足,验证才能通过。
anyOf
oneOf

逻辑对比表#

关键字逻辑操作条件要求典型使用场景
allOfAND必须同时满足所有条件继承、扩展
anyOfOR必须至少满足一个条件可选组合
oneOfXOR必须恰好满足一个条件互斥选择

在 Apidog 中的用法#

1. 使用可视化编辑器#

1
步骤 1:创建数据 Schema
在你的项目中,点击 "Schemas",然后点击 "New Schema"。
创建新的 schema
2
步骤 2:添加 Schema 组合
在数据 Schema 编辑面板中,选择类型时,点击 "Schema Composition",并选择 oneOf、anyOf 或 allOf。为每个子 Schema 定义具体的数据结构。
添加 schema 组合

2. 使用 JSON Schema 代码编辑器#

你也可以直接在数据 Schema 编辑面板中编辑 JSON Schema 代码,以定义这些逻辑组合模式。
JSON Schema 代码编辑器

在 API 文档中的应用#

请求参数定义#

定义端点请求参数时,你可以使用这些组合模式来描述复杂的参数结构:
1
进入 API 编辑页面。
2
在 "Request Parameters" 部分,选择 Body 并选择 JSON 类型。
3
在数据结构中,点击 "Reference Schema",或根据业务逻辑选择合适的 "Schema Composition",也可以定义自定义 JSON Schema。
请求参数 schema 组合

响应数据定义#

同样,你可以在响应数据中使用这些 Schema 组合:
1
在 "Response" 部分,添加响应示例。
2
使用 Schema 组合来描述不同的响应格式。
响应 schema 组合

实际使用示例#

allOf 示例(AND 操作)#

使用 allOf 可以将多个数据 Schema 组合在一起,要求数据同时满足所有条件。这就像是在说“用户信息必须包含基本信息 AND 联系信息”:
{
  "allOf": [
    {
      "description": "Basic user information",
      "type": "object",
      "properties": {
        "id": { "type": "integer" },
        "name": { "type": "string" }
      },
      "required": ["id", "name"]
    },
    {
      "description": "Contact information", 
      "type": "object",
      "properties": {
        "email": { "type": "string", "format": "email" },
        "phone": { "type": "string" }
      },
      "required": ["email"]
    }
  ]
}
结果: 最终数据必须包含 id、name 和 email 字段,phone 为可选字段。来自子 Schema 的所有约束都会被合并并执行,如下所示:
allOf 示例结果

anyOf 示例(OR 操作)#

使用 anyOf 可以提供多个可选验证路径——用户可以选择任意一个或多个方式。这就像是在说“用户可以通过用户名/密码登录 OR 邮箱/密码登录 OR 手机号/验证码登录”:
{
  "type": "object",
  "properties": {
    "login": {
      "anyOf": [
        {
          "description": "Username/password login",
          "properties": {
            "username": { "type": "string" },
            "password": { "type": "string" }
          },
          "required": ["username", "password"]
        },
        {
          "description": "Email/password login",
          "properties": {
            "email": { "type": "string", "format": "email" },
            "password": { "type": "string" }
          },
          "required": ["email", "password"]
        },
        {
          "description": "Phone/verification code login",
          "properties": {
            "phone": { "type": "string" },
            "verifyCode": { "type": "string" }
          },
          "required": ["phone", "verifyCode"]
        }
      ]
    }
  }
}
结果: 用户可以提供任意一个或多个登录方式的信息,只要至少有一种方式满足验证要求即可,如下所示:
anyOf 示例结果

oneOf 示例(XOR 操作)#

使用 oneOf 可确保用户只能选择一种支付方式,不能同时提供多种方式。这就像是在说“支付方式必须是信用卡 XOR PayPal XOR 银行转账——这些选项中恰好选择一个”:
{
  "type": "object", 
  "properties": {
    "payment": {
      "oneOf": [
        {
          "description": "Credit card payment",
          "type": "object",
          "properties": {
            "type": { "const": "credit_card" },
            "cardNumber": { "type": "string" },
            "expiryDate": { "type": "string" }
          },
          "required": ["type", "cardNumber", "expiryDate"],
          "additionalProperties": false
        },
        {
          "description": "PayPal payment", 
          "type": "object",
          "properties": {
            "type": { "const": "paypal" },
            "email": { "type": "string", "format": "email" }
          },
          "required": ["type", "email"],
          "additionalProperties": false
        },
        {
          "description": "Bank transfer",
          "type": "object", 
          "properties": {
            "type": { "const": "bank_transfer" },
            "accountNumber": { "type": "string" },
            "routingNumber": { "type": "string" }
          },
          "required": ["type", "accountNumber", "routingNumber"],
          "additionalProperties": false
        }
      ]
    }
  }
}
结果: 用户必须恰好选择一种支付方式——不能同时提供多种方式,也不能一种都不提供,如下所示:
oneOf 示例结果

最佳实践#

选择组合模式时,首先明确你的业务逻辑:
需要组合/继承多个 Schema → 使用 allOf(AND 操作)
需要灵活的可选组合 → 使用 anyOf(OR 操作)
需要严格的互斥选择 → 使用 oneOf(XOR 操作)
Modified at 2026-06-09 08:55:47
Previous
从 JSON 等生成 Schema
Next
使用 Discriminator
Built with