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.| Từ khóa | Phép toán logic | Yêu cầu điều kiện | Trường hợp sử dụng điển hình |
|---|---|---|---|
allOf | AND | Phải đáp ứng đồng thời tất cả điều kiện | Kế thừa, mở rộng |
anyOf | OR | Phải đáp ứng ít nhất một điều kiện | Tổ hợp tùy chọn |
oneOf | XOR | Phải đáp ứng chính xác một điều kiện | Lựa chọn loại trừ lẫn nhau |
oneOf, anyOf hoặc allOf. Định nghĩa các cấu trúc dữ liệu cụ thể cho từng schema con.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"]
}
]
}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"]
}
]
}
}
}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
}
]
}
}
}allOf (phép toán AND)anyOf (phép toán OR)oneOf (phép toán XOR)