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 に設定します。

試してみる — JSON Schema Generator

フルツールを開く