oneOf、anyOf、allOf — JSON Schemaのスキーマ合成
JSON Schemaの合成キーワード oneOf、anyOf、allOf をマスターしましょう。多相データに対して複数のサブスキーマに対するバリデーションを行う柔軟なスキーマを構築します。
Advanced Patterns
詳細な説明
スキーマ合成キーワード
JSON Schemaは、複数のサブスキーマを柔軟なバリデーションルールに組み合わせる3つの合成キーワード — oneOf、anyOf、allOf — を提供します。
anyOf — 少なくとも1つに一致
値はリストされたサブスキーマの1つ以上に対してバリデーションに合格する必要があります:
{
"payment": {
"anyOf": [
{
"type": "object",
"properties": { "cardNumber": { "type": "string" } },
"required": ["cardNumber"]
},
{
"type": "object",
"properties": { "bankAccount": { "type": "string" } },
"required": ["bankAccount"]
}
]
}
}
oneOf — 正確に1つに一致
値はリストされたサブスキーマの正確に1つに対してバリデーションに合格する必要があります。const ディスクリミネーターにより各分岐が相互排他的になります。
allOf — すべてのサブスキーマに一致
値はリストされたすべてのサブスキーマに対してバリデーションに合格する必要があります。これは $ref と組み合わせて基本スキーマを追加プロパティで拡張するために一般的に使用されます。
適切なキーワードの選択
| キーワード | セマンティクス | 典型的なユースケース |
|---|---|---|
anyOf |
少なくとも1つが一致 | 柔軟なユニオン、nullable型 |
oneOf |
正確に1つが一致 | 判別ユニオン、多相型 |
allOf |
すべてが一致 | スキーマ継承、ミックスイン |
ジェネレーターの動作
ジェネレーターは通常、単一のサンプルから合成キーワードを生成しません。これらのキーワードは手動で追加するか、異なる形状を持つ複数のサンプルから生成されます。
ユースケース
タイプに基づいて異なる形状を持つ多相APIレスポンス、支払い方法の選択、多様なペイロードを持つイベントシステム、またはロール固有のフィールドで基本スキーマを拡張する場合に合成キーワードを使用します。