Apidog Docs
🇻🇳 Tiếng Việt
  • 🇺🇸 English
  • 🇯🇵 日本語
  • 🇪🇸 Español
  • 🇰🇷 한국인
  • 🇨🇳 简体中文
  • 🇵🇹 Português (Portugal)
  • 🇮🇩 Bahasa Indonesia
  • 🇧🇷 Português (Brasil)
  • 🇻🇳 Tiếng Việt
  • 🇨🇳 繁體中文
🇻🇳 Tiếng Việt
  • 🇺🇸 English
  • 🇯🇵 日本語
  • 🇪🇸 Español
  • 🇰🇷 한국인
  • 🇨🇳 简体中文
  • 🇵🇹 Português (Portugal)
  • 🇮🇩 Bahasa Indonesia
  • 🇧🇷 Português (Brasil)
  • 🇻🇳 Tiếng Việt
  • 🇨🇳 繁體中文
🇻🇳 Tiếng Việt
  • 🇺🇸 English
  • 🇯🇵 日本語
  • 🇪🇸 Español
  • 🇰🇷 한국인
  • 🇨🇳 简体中文
  • 🇵🇹 Português (Portugal)
  • 🇮🇩 Bahasa Indonesia
  • 🇧🇷 Português (Brasil)
  • 🇻🇳 Tiếng Việt
  • 🇨🇳 繁體中文
Learning Center
HomeSupport CenterAPI ReferencesDownloadChangelog
Learning Center
HomeSupport CenterAPI ReferencesDownloadChangelog
  1. Schemas
  • Trung tâm Học tập Apidog
  • Bắt đầu
    • Giới thiệu về Apidog
    • Các khái niệm cơ bản trong Apidog
    • Điều hướng Apidog
    • Bắt đầu nhanh
      • Tổng quan
      • Tạo một Endpoint
      • Tạo yêu cầu
      • Thêm một khẳng định
      • Tạo kịch bản kiểm thử
      • Chia sẻ tài liệu API
      • Khám phá thêm
    • Di chuyển sang Apidog
      • Tổng quan
      • Nhập thủ công
      • Nhập theo lịch (Liên kết nguồn dữ liệu)
      • Tùy chọn nhập
      • Xuất dữ liệu
      • Nhập từ
        • Nhập từ Postman
        • Nhập OpenAPI Spec
        • Nhập cURL
        • Nhập Markdown
        • Nhập từ Insomnia
        • Nhập từ apiDoc
        • Nhập tệp .har
        • Nhập WSDL
  • Dữ liệu API mock
    • Tổng quan
    • Smart Mock
    • Mock tùy chỉnh
    • Trình tự ưu tiên Mock
    • Mock Scripts
    • Cloud Mock
    • Self-Hosted Runner Mock
    • Ngôn ngữ Mock (Locales)
  • Tài khoản và tùy chọn
    • Cài đặt tài khoản
    • Tạo Token truy cập OpenAPI
    • Thông báo
    • Cài đặt ngôn ngữ
    • Phím tắt
    • Cấu hình Proxy Mạng
    • Sao lưu dữ liệu
    • Cập nhật Apidog
    • Xóa tài khoản
    • Tính năng thử nghiệm
  • Gửi yêu cầu
    • Tổng quan
    • Gỡ lỗi SSE
    • MCP Client
    • Socket.IO
    • WebSocket
    • Webhook
    • SOAP hoặc WebService
    • GraphQL
    • gRPC
    • Sử dụng Tác nhân Proxy Yêu cầu để Gỡ lỗi
    • Tạo yêu cầu
      • Lịch sử yêu cầu
      • Cơ bản về yêu cầu
      • Tham số và Body
      • Header của yêu cầu
      • Cài đặt yêu cầu
      • Gỡ lỗi yêu cầu
      • Lưu yêu cầu dưới dạng Endpoint
      • HTTP/2
    • Xác thực và phân quyền
      • Tổng quan
      • Chứng chỉ CA và Chứng chỉ Client
      • Các loại ủy quyền
      • Digest Auth
      • OAuth 1.0
      • OAuth 2.0
      • Xác thực Hawk
      • Kerberos
      • NTLM
      • Akamai EdgeGrid
    • Phản hồi và cookie
      • Xem phản hồi API
      • Quản lý Cookie
      • Tổng quan
  • Phát triển và gỡ lỗi API
    • Tổng quan
    • Tạo yêu cầu
    • Gửi yêu cầu
    • Trường hợp gỡ lỗi
    • Trường hợp kiểm thử
    • Giá trị động
    • Xác thực phản hồi
    • Design-First vs Request-First
    • Tạo mã
    • Môi trường và biến
      • Tổng quan
      • Sử dụng biến
      • Quản lý môi trường
    • Bí mật trong vault
      • Tổng quan
      • HashiCorp Vault
      • Azure Key Vault
      • AWS Secrets Manager
    • Mô-đun giá trị động
      • Hãng hàng không
      • Animal
      • Màu sắc
      • Commerce
      • Company
      • Cơ sở dữ liệu
      • Kiểu dữ liệu
      • Ngày
      • Finance
      • Food
      • Git
      • Hacker
      • Helpers
      • Hình ảnh
      • Internet
      • Vị trí
      • Lorem
      • Music
      • Number
      • Person
      • Phone
      • Science
      • String
      • Hệ thống
      • Vehicle
      • Từ
    • Bộ xử lý trước và sau
      • Tổng quan
      • Khẳng định
      • Trích xuất biến
      • Chờ
      • Bảo mật
      • Thao tác cơ sở dữ liệu
        • Tổng quan
        • MySQL
        • MongoDB
        • Redis
        • Oracle Client
      • Sử dụng script
        • Tổng quan
        • Script tiền xử lý
        • Tập lệnh hậu xử lý
        • Public Scripts
        • Tài liệu tham khảo về Postman Scripts
        • Gọi các ngôn ngữ lập trình khác
        • Sử dụng thư viện JS
        • Trực quan hóa phản hồi
        • Ví dụ script
          • Tập lệnh khẳng định
          • Sử dụng biến
          • Sửa đổi yêu cầu
          • Các ví dụ khác
    • Gỡ lỗi API
      • AI Agent Debugger
      • A2A Debugger
  • Thiết kế API
    • Tổng quan
    • Tạo một dự án API mới
    • Kiến thức cơ bản về Endpoint
    • Hướng dẫn thiết kế API
    • Mô-đun
    • Cấu hình nhiều ví dụ về body của yêu cầu
    • Thành phần
    • Trường Chung
    • Tham số toàn cục
    • Lịch sử thay đổi endpoint
    • Bình luận
    • Quản lý Endpoint Hàng loạt
    • Custom Protocol API
    • Chế độ Spec-first (Beta)
    • Lược đồ bảo mật
      • Tổng quan
      • Tạo Security Scheme
      • Sử dụng Lược đồ bảo mật
      • Lược đồ bảo mật trong tài liệu trực tuyến
    • Tính năng nâng cao
      • Trường Endpoint Tùy chỉnh
      • Các kịch bản kiểm thử được liên kết
      • Trạng thái Endpoint
      • Giao diện của Danh sách Tham số
      • Nhận dạng duy nhất endpoint
    • Schemas
      • Tổng quan
      • Tạo Schema Mới
      • Xây dựng Schema
      • Tạo Schema từ JSON, v.v.
      • oneOf, allOf, anyOf
      • Sử dụng Discriminator
  • Kiểm thử API
    • Tổng quan
    • Kịch bản kiểm thử
      • Tạo một kịch bản kiểm thử
      • Truyền dữ liệu giữa các yêu cầu
      • Điều kiện điều khiển luồng
      • Đồng bộ dữ liệu từ endpoint và trường hợp endpoint
      • Nhập Endpoint và Endpoint Case từ các dự án khác
      • Xuất Kịch bản Kiểm thử
    • Báo cáo kiểm thử
      • Báo cáo kiểm thử
    • Chạy kịch bản kiểm thử
      • Chạy một kịch bản kiểm thử
      • Chạy hàng loạt các kịch bản kiểm thử
      • Kiểm thử dựa trên dữ liệu
      • Dữ liệu kiểm thử dùng chung
      • Tác vụ đã lên lịch
      • Quản lý môi trường runtime của API từ các dự án khác
    • Bộ kiểm thử
      • Tổng quan
      • Tạo một bộ kiểm thử
      • Điều phối Bộ kiểm thử
      • Chạy bộ kiểm thử cục bộ
      • Chạy Bộ Kiểm Thử Qua CLI
      • Tác vụ đã lên lịch
    • Kiểm thử API
      • Kiểm thử tích hợp
      • Kiểm thử hiệu năng
      • Kiểm thử End-to-End
      • Kiểm thử hồi quy
      • Kiểm thử hợp đồng
    • Apidog CLI
      • Tổng quan
      • Cài đặt và chạy Apidog CLI
      • Tùy chọn Apidog CLI
    • CI/CD
      • Tổng quan
      • Tích hợp với Github Actions
      • Tích hợp với Gitlab
      • Tích hợp với Jenkins
      • Kích hoạt kiểm thử bằng Git Commit
  • Xuất bản tài liệu API
    • Tổng quan
    • Các công nghệ API được hỗ trợ
    • Chia sẻ nhanh
    • Xem tài liệu API
    • Tài liệu Markdown
    • Xuất bản site tài liệu
    • Trang đăng nhập tùy chỉnh
    • Bố cục tùy chỉnh
    • CSS, JavaScript, HTML tùy chỉnh
    • Tên miền tùy chỉnh
    • Tính năng AI
    • Cài đặt SEO
    • Cài đặt nâng cao
      • Tìm kiếm tài liệu
      • Proxy CORS
      • Tích hợp Google Analytics
      • Cài đặt cây thư mục
      • Cài đặt khả năng hiển thị
      • Nhúng giá trị vào URL tài liệu
    • Phiên bản API
      • Tổng quan
      • Tạo phiên bản API
      • Xuất bản các phiên bản API
      • Chia sẻ endpoint theo phiên bản API
  • Nhánh
    • Tổng quan
    • Tạo một Sprint Branch
    • Kiểm thử API trong một nhánh
    • Thiết kế API trong một nhánh
    • Hợp nhất các nhánh Sprint
    • Quản lý Nhánh Sprint
    • AI Branch (Beta)
  • Tính năng AI
    • Tổng quan
    • Bật các tính năng AI
    • Tạo Trường hợp Kiểm thử
    • Sửa đổi Schema bằng AI
    • Kiểm tra tuân thủ endpoint
    • Kiểm tra mức độ hoàn chỉnh của tài liệu API
    • Đặt tên trường bằng AI
    • Câu hỏi thường gặp
  • Máy chủ MCP Apidog
    • Tổng quan
    • Kết nối dự án Apidog với AI
    • Kết nối tài liệu đã xuất bản với AI
    • Kết nối tệp OpenAPI với AI
  • Thực hành tốt nhất
    • Xử lý chữ ký API
    • Truy cập các API được bảo vệ bằng OAuth 2.0
    • Quy trình cộng tác
    • Quản lý trạng thái xác thực
  • Không gian ngoại tuyến
    • Tổng quan
  • Apidog Europe
    • Apidog Europe
  • Quản trị
    • Quản lý dự án
      • Quản lý dự án
      • Cài đặt thông báo
      • Quản lý thành viên dự án
      • Tài nguyên dự án
        • Kết nối cơ sở dữ liệu
        • Kết nối Git
    • Quản lý nhóm
      • Quản lý nhóm
      • Quản lý thành viên nhóm
      • Hoạt động của nhóm
      • Vai trò & Quyền của Nhóm
      • Tài nguyên nhóm
        • General Runner
        • Biến nhóm
        • Request Proxy Agent
      • Cộng tác thời gian thực
        • Cộng tác nhóm
    • Danh sách kiểm tra onboarding
      • Khái niệm cơ bản
      • Hướng dẫn nhập môn
    • Quản lý tổ chức
      • Quản lý Tổ chức
      • Vai trò & Quyền trong Tổ chức
      • Quản lý gói
        • Người quản lý thanh toán trong tổ chức
      • Đăng nhập một lần (SSO)
        • Tổng quan về SSO
        • Cấu hình Microsoft Entra ID
        • Cấu hình Okta
        • Cấu hình SSO cho một tổ chức
        • Quản lý tài khoản người dùng
        • Ánh xạ Nhóm tới Đội
      • Cấp phát SCIM
        • Giới thiệu về cấp phát SCIM
        • Microsoft Entra ID
        • Okta
      • Tài nguyên tổ chức
        • Self-Hosted Runner
  • Thanh toán
    • Tổng quan
    • Credits
    • Nâng cấp gói của bạn
    • Phương thức thanh toán thay thế
    • Quản lý đăng ký
    • Chuyển các nhóm trả phí vào tổ chức
  • Tiện ích bổ sung
    • API Hub
    • Apidog Intellij IDEA Plugin
    • Tiện ích mở rộng trình duyệt
      • Chrome
      • Microsoft Edge
    • Proxy yêu cầu
      • Proxy yêu cầu trên Web
      • Proxy yêu cầu trong tài liệu được chia sẻ
      • Proxy yêu cầu trong Client
  • Dữ liệu và bảo mật
    • Lưu trữ và bảo mật dữ liệu
    • Quyền riêng tư và bảo mật dữ liệu người dùng
    • Định tuyến yêu cầu và bảo mật dữ liệu
  • Tham chiếu
    • Phương pháp tiếp cận API Design-First
    • Phần mở rộng Đặc tả OpenAPI của Apidog
    • JSONPath
    • XPath
    • Biểu thức chính quy
    • JSON Schema
    • Định dạng tệp CSV
    • Cài đặt môi trường Java
    • Môi trường triển khai Runner
    • Cú pháp Markdown của Apidog
    • Tiện ích mở rộng Swagger của Apidog
      • Tổng quan
      • x-apidog-folder
      • x-apidog-status
      • x-apidog-name
      • x-apidog-maintainer
    • Tiện ích mở rộng JSON Schema của Apidog
      • Tổng quan
      • x-apidog-mock
      • x-apidog-orders
      • x-apidog-enum
  • Trung tâm hỗ trợ
  1. Schemas

oneOf, allOf, anyOf

oneOf, anyOf và allOf là các từ khóa trong đặc tả JSON Schema, được sử dụng để định nghĩa các cấu trúc dữ liệu tổng hợp. Về bản chất, chúng là các toán tử logic được áp dụng cho việc xác thực dữ liệu. Apidog hỗ trợ đầy đủ các tính năng JSON Schema này, giúp bạn xây dựng tài liệu API và quy tắc xác thực dữ liệu chính xác hơn.

Khái niệm cơ bản#

allOf
allOf có nghĩa là dữ liệu phải đồng thời đáp ứng tất cả các điều kiện của schema con, tương đương với phép toán AND trong các phép toán logic. Tương tự cách diễn đạt "vừa... vừa..." trong ngôn ngữ hằng ngày, tất cả điều kiện phải được đáp ứng đồng thời thì quá trình xác thực mới thành công.
anyOf
oneOf

Bảng so sánh logic#

Từ khóaPhép toán logicYêu cầu điều kiệnTrường hợp sử dụng điển hình
allOfANDPhải đáp ứng đồng thời tất cả điều kiệnKế thừa, mở rộng
anyOfORPhải đáp ứng ít nhất một điều kiệnTổ hợp tùy chọn
oneOfXORPhải đáp ứng chính xác một điều kiệnLựa chọn loại trừ lẫn nhau

Cách sử dụng trong Apidog#

1. Sử dụng trình chỉnh sửa trực quan#

1
Bước 1: Tạo schema dữ liệu
Trong dự án của bạn, nhấp vào "Schemas", sau đó nhấp "New Schema".
Tạo schema mới
2
Bước 2: Thêm thành phần schema
Trong bảng chỉnh sửa schema dữ liệu, khi chọn loại, hãy nhấp vào "Schema Composition" và chọn oneOf, anyOf hoặc allOf. Định nghĩa các cấu trúc dữ liệu cụ thể cho từng schema con.
Thêm thành phần schema

2. Sử dụng trình chỉnh sửa mã JSON Schema#

Bạn cũng có thể trực tiếp chỉnh sửa mã JSON Schema trong bảng chỉnh sửa schema dữ liệu để định nghĩa các mẫu tổng hợp logic này.
Trình chỉnh sửa mã JSON Schema

Ứng dụng trong tài liệu API#

Định nghĩa tham số yêu cầu#

Khi định nghĩa tham số yêu cầu của endpoint, bạn có thể sử dụng các mẫu tổng hợp này để mô tả các cấu trúc tham số phức tạp:
1
Truy cập trang chỉnh sửa API.
2
Trong phần "Request Parameters", chọn Body và chọn loại JSON.
3
Trong cấu trúc dữ liệu, nhấp vào "Reference Schema", hoặc chọn "Schema Composition" phù hợp dựa trên logic nghiệp vụ, hoặc định nghĩa JSON Schema tùy chỉnh.
Thành phần schema cho tham số yêu cầu

Định nghĩa dữ liệu phản hồi#

Tương tự, bạn có thể sử dụng các thành phần schema này trong dữ liệu phản hồi:
1
Trong phần "Response", thêm các ví dụ phản hồi.
2
Sử dụng thành phần schema để mô tả các định dạng phản hồi khác nhau.
Thành phần schema cho phản hồi

Ví dụ sử dụng thực tế#

Ví dụ allOf (Phép toán AND)#

Sử dụng allOf cho phép bạn kết hợp nhiều schema dữ liệu lại với nhau, yêu cầu dữ liệu phải đồng thời đáp ứng tất cả điều kiện. Điều này giống như nói "thông tin người dùng phải bao gồm thông tin cơ bản AND thông tin liên hệ":
{
  "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"]
    }
  ]
}
Kết quả: Dữ liệu cuối cùng phải chứa các trường id, name và email, trong đó phone là tùy chọn. Tất cả ràng buộc từ các schema con được hợp nhất và thực thi, như minh họa bên dưới:
Kết quả ví dụ allOf

Ví dụ anyOf (Phép toán OR)#

Sử dụng anyOf cung cấp nhiều đường dẫn xác thực tùy chọn - người dùng có thể chọn một hoặc nhiều phương thức bất kỳ. Điều này giống như nói "người dùng có thể đăng nhập bằng tên người dùng/mật khẩu OR email/mật khẩu OR điện thoại/mã xác minh":
{
  "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"]
        }
      ]
    }
  }
}
Kết quả: Người dùng có thể cung cấp thông tin cho một hoặc nhiều phương thức đăng nhập bất kỳ, miễn là ít nhất một phương thức đáp ứng các yêu cầu xác thực, như minh họa bên dưới:
Kết quả ví dụ anyOf

Ví dụ oneOf (Phép toán XOR)#

Sử dụng oneOf đảm bảo rằng người dùng chỉ có thể chọn một phương thức thanh toán và không thể đồng thời cung cấp nhiều phương thức. Điều này giống như nói "phương thức thanh toán phải là thẻ tín dụng XOR PayPal XOR chuyển khoản ngân hàng - chính xác một trong các tùy chọn này":
{
  "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
        }
      ]
    }
  }
}
Kết quả: Người dùng phải chọn chính xác một phương thức thanh toán - họ không thể đồng thời cung cấp nhiều phương thức, cũng không thể không cung cấp phương thức nào, như minh họa bên dưới:
Kết quả ví dụ oneOf

Thực hành tốt nhất#

Khi chọn mẫu tổng hợp, trước tiên hãy làm rõ logic nghiệp vụ của bạn:
Cần kết hợp/kế thừa nhiều schema → Sử dụng allOf (phép toán AND)
Cần các tổ hợp tùy chọn linh hoạt → Sử dụng anyOf (phép toán OR)
Cần các lựa chọn loại trừ lẫn nhau nghiêm ngặt → Sử dụng oneOf (phép toán XOR)
Modified at 2026-06-11 10:23:06
Previous
Tạo Schema từ JSON, v.v.
Next
Sử dụng Discriminator
Built with