JSON Schemaの additionalProperties を制御する
additionalProperties がJSONオブジェクトに余分なキーを許可するかどうかを制御する方法を学びます。厳密な検証には false に設定し、柔軟性のために型を定義します。
Object Schemas
詳細な説明
additionalProperties とは
デフォルトでは、JSON Schemaはオブジェクトに properties にリストされていないキーを含めることを許可します。additionalProperties キーワードを使って、この動作を制御できます。
デフォルト動作(許容的)
additionalProperties がない場合、余分なキーは静かに受け入れられます:
{
"type": "object",
"properties": {
"name": { "type": "string" }
}
}
厳密モード: false
additionalProperties: false を設定すると、properties(または patternProperties)にリストされていないキーを拒否します:
{
"type": "object",
"properties": {
"name": { "type": "string" },
"email": { "type": "string" }
},
"additionalProperties": false
}
型付き追加プロパティ
additionalProperties を、余分なキーが準拠すべきスキーマに設定することもできます:
{
"type": "object",
"properties": {
"name": { "type": "string" }
},
"additionalProperties": { "type": "string" }
}
各設定の使い分け
false— タイポや予期しないフィールドを拒否したいAPIリクエストボディ。true(または省略) — プラグインがカスタムキーを追加できる設定ファイルなどの拡張可能なフォーマット。- スキーマ値 — ローカライゼーション辞書や機能フラグなど、キーが動的だが値が一貫した型に従うキーバリューマップ。
required との相互作用
additionalProperties: false はどのプロパティが必須であるかには影響しません。必須フィールドを指定するには required 配列が引き続き必要です。2つのキーワードは相補的です。
ユースケース
セキュリティ問題やサイレントなデータ損失を引き起こす可能性のある予期しないフィールドの送信を防ぐために、厳密なAPI入力バリデーションで additionalProperties を false に設定します。