oneOf
、anyOf
、allOf
は、JSON Schema仕様で定義されている複合データ構造を表現するためのキーワードです。これらはデータバリデーションに論理演算子として機能し、ApidogではこれらのJSON Schema機能を完全にサポートしています。これにより、より精度の高いAPIドキュメントやデータ検証ルールの構築が可能となります。キーワード | 論理演算 | 条件要件 | 主な用途 |
---|---|---|---|
allOf | AND | すべての条件を同時に満たす必要がある | 継承・拡張 |
anyOf | OR | いずれか1つ以上の条件を満たす必要がある | 任意の組み合わせ |
oneOf | XOR | ちょうど1つの条件のみを満たす必要がある | 排他的選択 |
oneOf
、anyOf
、allOf
から選択します。各サブスキーマごとに具体的なデータ構造を定義してください。allOf
を利用すると、複数のデータスキーマを組み合わせ、すべての条件を同時に満たす必要があります。例えば「ユーザー情報は基本情報かつ連絡先情報を含む必要がある」といったケースです。{
"allOf": [
{
"description": "基本ユーザー情報",
"type": "object",
"properties": {
"id": { "type": "integer" },
"name": { "type": "string" }
},
"required": ["id", "name"]
},
{
"description": "連絡先情報",
"type": "object",
"properties": {
"email": { "type": "string", "format": "email" },
"phone": { "type": "string" }
},
"required": ["email"]
}
]
}
anyOf
を使うことで、複数のバリデーションパスから任意のものを選択できます。例えば「ユーザーはユーザー名/パスワードまたはメールアドレス/パスワードまたは電話番号/認証コードでログインできる」といったケースです。{
"type": "object",
"properties": {
"login": {
"anyOf": [
{
"description": "ユーザー名/パスワードでのログイン",
"properties": {
"username": { "type": "string" },
"password": { "type": "string" }
},
"required": ["username", "password"]
},
{
"description": "メールアドレス/パスワードでのログイン",
"properties": {
"email": { "type": "string", "format": "email" },
"password": { "type": "string" }
},
"required": ["email", "password"]
},
{
"description": "電話番号/認証コードでのログイン",
"properties": {
"phone": { "type": "string" },
"verifyCode": { "type": "string" }
},
"required": ["phone", "verifyCode"]
}
]
}
}
}
oneOf
を利用すると、ユーザーは支払い方法を1つだけ選択でき、複数を同時に指定することはできません。例えば「支払い方法はクレジットカードXORPayPalXOR銀行振込 ― いずれか1つのみ選択可能」のようなケースです。{
"type": "object",
"properties": {
"payment": {
"oneOf": [
{
"description": "クレジットカード決済",
"type": "object",
"properties": {
"type": { "const": "credit_card" },
"cardNumber": { "type": "string" },
"expiryDate": { "type": "string" }
},
"required": ["type", "cardNumber", "expiryDate"],
"additionalProperties": false
},
{
"description": "PayPal決済",
"type": "object",
"properties": {
"type": { "const": "paypal" },
"email": { "type": "string", "format": "email" }
},
"required": ["type", "email"],
"additionalProperties": false
},
{
"description": "銀行振込",
"type": "object",
"properties": {
"type": { "const": "bank_transfer" },
"accountNumber": { "type": "string" },
"routingNumber": { "type": "string" }
},
"required": ["type", "accountNumber", "routingNumber"],
"additionalProperties": false
}
]
}
}
}
allOf
(AND演算)anyOf
(OR演算)oneOf
(XOR演算)