oneOf, anyOf, dan allOf adalah kata kunci dalam spesifikasi JSON Schema yang digunakan untuk mendefinisikan struktur data komposit. Pada dasarnya, kata kunci tersebut merupakan operator logis yang diterapkan pada validasi data. Apidog sepenuhnya mendukung fitur JSON Schema ini, membantu Anda membuat dokumentasi API dan aturan validasi data yang lebih akurat.| Kata Kunci | Operasi Logis | Persyaratan Kondisi | Kasus Penggunaan Umum |
|---|---|---|---|
allOf | AND | Harus memenuhi semua kondisi secara bersamaan | Pewarisan, ekstensi |
anyOf | OR | Harus memenuhi setidaknya satu kondisi | Kombinasi opsional |
oneOf | XOR | Harus memenuhi tepat satu kondisi | Pilihan yang saling eksklusif |
oneOf, anyOf, atau allOf. Definisikan struktur data spesifik untuk setiap subschema.allOf memungkinkan Anda menggabungkan beberapa skema data, yang mengharuskan data memenuhi semua kondisi secara bersamaan. Ini seperti mengatakan "informasi pengguna harus mencakup informasi dasar AND informasi kontak":{
"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 menyediakan beberapa jalur validasi opsional - pengguna dapat memilih satu atau beberapa metode. Ini seperti mengatakan "pengguna dapat login melalui username/password OR email/password OR phone/verification code":{
"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 memastikan bahwa pengguna hanya dapat memilih satu metode pembayaran dan tidak dapat memberikan beberapa metode secara bersamaan. Ini seperti mengatakan "metode pembayaran harus kartu kredit XOR PayPal XOR transfer bank - tepat salah satu dari opsi ini":{
"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 (operasi AND)anyOf (operasi OR)oneOf (operasi XOR)