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 模擬
    • 模擬語言(Locales)
  • 帳號與偏好設定
    • 帳戶設定
    • 產生 OpenAPI 存取權杖
    • 通知
    • 語言設定
    • 快捷鍵
    • 網路代理設定
    • 備份資料
    • 更新 Apidog
    • 刪除帳戶
    • 實驗性功能
  • 傳送請求
    • 概覽
    • SSE 偵錯
    • MCP Client
    • Socket.IO
    • WebSocket
    • Webhook
    • SOAP 或 WebService
    • GraphQL
    • gRPC
    • 使用請求代理代理程式進行偵錯
    • 建立請求
      • 請求歷史記錄
      • 請求基礎
      • 參數與主體
      • 請求標頭
      • 請求設定
      • 偵錯請求
      • 將請求儲存為端點
      • HTTP/2
    • 驗證與授權
      • 概覽
      • CA 和用戶端憑證
      • 授權類型
      • Digest Auth
      • OAuth 1.0
      • OAuth 2.0
      • Hawk 驗證
      • Kerberos
      • NTLM
      • Akamai EdgeGrid
    • 回應和 Cookie
      • 檢視 API 回應
      • 管理 Cookie
      • 概覽
  • 開發和偵錯 API
    • 概觀
    • 產生請求
    • 傳送請求
    • 偵錯案例
    • 測試案例
    • 動態值
    • 驗證回應
    • Design-First 與 Request-First
    • 產生程式碼
    • 環境與變數
      • 概述
      • 使用變數
      • 環境管理
    • Vault 密鑰
      • 概覽
      • HashiCorp Vault
      • Azure Key Vault
      • AWS Secrets Manager
    • 動態值模組
      • Airline
      • 動物
      • 顏色
      • Commerce
      • Company
      • 資料庫
      • Datatype
      • 日期
      • Finance
      • Food
      • Git
      • Hacker
      • Helpers
      • 圖片
      • Internet
      • 位置
      • Lorem
      • 音樂
      • Number
      • Person
      • Phone
      • 科學
      • 字串
      • System
      • Vehicle
      • Word
    • 前置和後置處理器
      • 概覽
      • 斷言
      • 擷取變數
      • Wait
      • 安全性
      • 資料庫操作
        • 概述
        • MySQL
        • MongoDB
        • Redis
        • Oracle Client
      • 使用腳本
        • 概觀
        • 前置處理器指令碼
        • 後置處理器腳本
        • 公開腳本
        • Postman Scripts Reference
        • 呼叫其他程式語言
        • 使用 JS Libraries
        • 視覺化回應
        • 腳本範例
          • 斷言腳本
          • 使用變數
          • 修改請求
          • 其他範例
    • API 偵錯
      • AI Agent Debugger
      • A2A Debugger
  • 設計 API
    • 概覽
    • 建立新的 API 專案
    • 端點基礎
    • APl 設計指南
    • 模組
    • 設定多個請求主體範例
    • 元件
    • 通用欄位
    • 全域參數
    • 端點變更歷史
    • 留言
    • 批次端點管理
    • 自訂協定 API
    • Spec-first 模式 (Beta)
    • 安全方案
      • 概觀
      • 建立安全性方案
      • 使用 Security Scheme
      • 線上文件中的安全性方案
    • 進階功能
      • 自訂端點欄位
      • 關聯的測試場景
      • 端點狀態
      • 參數列表的外觀
      • 端點唯一識別
    • Schemas
      • 概述
      • 建立新 Schema
      • 建立 Schema
      • 從 JSON 等產生 Schema
      • oneOf, allOf, anyOf
      • 使用 Discriminator
  • API 測試
    • 概述
    • 測試情境
      • 建立測試情境
      • 在請求之間傳遞資料
      • 流程控制條件
      • 從端點和端點案例同步資料
      • 從其他專案匯入端點和端點案例
      • 匯出測試情境
    • 測試報告
      • 測試報告
    • 執行測試情境
      • 執行測試場景
      • 批次執行測試場景
      • 資料驅動測試
      • 共享測試資料
      • 排程任務
      • 管理來自其他專案的 API 執行環境
    • 測試套件
      • 概述
      • 建立測試套件
      • 編排測試套件
      • 在本機執行測試套件
      • 透過 CLI 執行測試套件
      • 排程任務
    • 測試 API
      • 整合測試
      • 效能測試
      • 端對端測試
      • 迴歸測試
      • 契約測試
    • Apidog CLI
      • 概覽
      • 安裝並執行 Apidog CLI
      • Apidog CLI 選項
    • CI/CD
      • 概述
      • 與 Github Actions 整合
      • Integrate with Gitlab
      • 與 Jenkins 整合
      • 透過 Git Commit 觸發測試
  • 發布 API 文件
    • 概述
    • 支援的 API 技術
    • 快速分享
    • 檢視 API 文件
    • Markdown 文件
    • 發佈文件網站
    • 自訂登入頁面
    • 自訂版面配置
    • 自訂 CSS、JavaScript、HTML
    • 自訂網域
    • AI Features
    • SEO 設定
    • 進階設定
      • 文件搜尋
      • CORS Proxy
      • 整合 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
  • Apidog Europe
    • Apidog Europe
  • 最佳實務
    • 處理 API 簽章
    • 存取受 OAuth 2.0 保護的 API
    • 協作工作流程
    • 管理驗證狀態
  • 離線空間
    • 概述
  • 管理
    • 管理專案
      • 管理專案
      • 通知設定
      • 管理專案成員
      • 專案資源
        • 資料庫連線
        • Git 連線
    • 管理團隊
      • 管理團隊
      • 管理團隊成員
      • 團隊活動
      • 團隊角色與權限
      • 團隊資源
        • General Runner
        • 團隊變數
        • 請求代理代理程式
      • 即時協作
        • 團隊協作
    • 入門檢查清單
      • 基本概念
      • 入門指南
    • 管理組織
      • 管理組織
      • 組織角色與權限
      • 方案管理
        • 組織中的帳單管理員
      • 單一登入 (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 表示資料必須同時滿足所有子結構描述條件,等同於邏輯運算中的 AND 運算。就像日常語言中的「既……又……」,所有條件都必須同時滿足,驗證才會通過。
anyOf
oneOf

邏輯比較表#

關鍵字邏輯運算條件要求典型使用情境
allOfAND必須同時滿足所有條件繼承、擴充
anyOfOR必須至少滿足一個條件可選組合
oneOfXOR必須剛好滿足一個條件互斥選項

在 Apidog 中的使用方式#

1. 使用視覺化編輯器#

1
步驟 1:建立資料結構描述
在你的專案中,點選 "Schemas",然後點選 "New Schema"。
建立新的結構描述
2
步驟 2:新增結構描述組合
在資料結構描述編輯面板中,選擇類型時,點選 "Schema Composition",並選擇 oneOf、anyOf 或 allOf。為每個子結構描述定義特定的資料結構。
新增結構描述組合

2. 使用 JSON Schema 程式碼編輯器#

你也可以直接在資料結構描述編輯面板中編輯 JSON Schema 程式碼,以定義這些邏輯組合模式。
JSON Schema 程式碼編輯器

在 API 文件中的應用#

請求參數定義#

定義端點請求參數時,你可以使用這些組合模式來描述複雜的參數結構:
1
進入 API 編輯頁面。
2
在 "Request Parameters" 區段中,選擇 Body 並選擇 JSON 類型。
3
在資料結構中,點選 "Reference Schema",或根據業務邏輯選擇適當的 "Schema Composition",或定義自訂 JSON Schema。
請求參數結構描述組合

回應資料定義#

同樣地,你也可以在回應資料中使用這些結構描述組合:
1
在 "Response" 區段中,新增回應範例。
2
使用結構描述組合來描述不同的回應格式。
回應結構描述組合

實際使用範例#

allOf 範例(AND 運算)#

使用 allOf 可讓你將多個資料結構描述組合在一起,要求資料同時滿足所有條件。這就像是說「使用者資訊必須包含基本資訊 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 則為選填。所有來自子結構描述的限制都會合併並執行,如下所示:
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 範例結果

最佳實務#

選擇組合模式時,請先釐清你的業務邏輯:
需要組合/繼承多個結構描述 → 使用 allOf(AND 運算)
需要彈性的可選組合 → 使用 anyOf(OR 運算)
需要嚴格的互斥選項 → 使用 oneOf(XOR 運算)
Modified at 2026-06-11 10:26:02
Previous
從 JSON 等產生 Schema
Next
使用 Discriminator
Built with