oneOf, anyOf y allOf son palabras clave de la especificación JSON Schema que se utilizan para definir estructuras de datos compuestas. Son, esencialmente, operadores lógicos aplicados a la validación de datos. Apidog admite plenamente estas funciones de JSON Schema, lo que le ayuda a crear documentación de API y reglas de validación de datos más precisas.| Palabra clave | Operación lógica | Requisito de condición | Caso de uso típico |
|---|---|---|---|
allOf | AND | Debe satisfacer todas las condiciones simultáneamente | Herencia, extensión |
anyOf | OR | Debe satisfacer al menos una condición | Combinaciones opcionales |
oneOf | XOR | Debe satisfacer exactamente una condición | Opciones mutuamente excluyentes |
oneOf, anyOf o allOf. Defina estructuras de datos específicas para cada subesquema.allOf le permite combinar varios esquemas de datos, lo que exige que los datos satisfagan todas las condiciones simultáneamente. Es como decir «la información del usuario debe incluir información básica AND información de contacto»:{
"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 proporciona varias rutas de validación opcionales: los usuarios pueden elegir uno o varios métodos. Es como decir «los usuarios pueden iniciar sesión mediante nombre de usuario/contraseña OR correo electrónico/contraseña OR teléfono/código de verificación»:{
"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 garantiza que los usuarios solo puedan elegir un método de pago y que no puedan proporcionar varios métodos simultáneamente. Es como decir «el método de pago debe ser tarjeta de crédito XOR PayPal XOR transferencia bancaria: exactamente una de estas opciones»:{
"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 (operación AND)anyOf (operación OR)oneOf (operación XOR)