プロパティが定義されていないオブジェクトスキーマ

フィールド構成が決まっているオブジェクトは、propertiesで各フィールドを定義します。

説明

構造が固定されたオブジェクトにpropertiesがないと、フィールド名と型が文書から分かりにくくなります。propertiesを定義するだけでは、他のフィールドは禁止されず、列挙したフィールドも必須にはなりません。

想定される影響

クライアントとサーバーが異なる構造を想定したり、不要なフィールドが検証を通過したりする可能性があります。

対処方法

想定するフィールドをpropertiesに定義し、必須フィールドをrequiredに追加してください。他のフィールドを禁止する必要がある場合に限り、additionalProperties: falseを使用します。動的なキーを持つマップでは、additionalPropertiesのスキーマで値の形式を定義できます。

例

この例では、必須のpetTypeを含む許可フィールドを定義し、それ以外を禁止しています。

変更前

json
{
  "components": {
    "schemas": {
      "GeneralError": {
        "type": "object",
        "required": [
          "petType"
        ]
      }
    }
  }
}

変更後

json
{
  "components": {
    "schemas": {
      "GeneralError": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "code": {
            "type": "integer",
            "format": "int32"
          },
          "message": {
            "type": "string"
          },
          "petType": {
            "type": "string"
          }
        },
        "required": [
          "petType"
        ]
      }
    }
  }
}

参考資料