説明
構造が固定されたオブジェクトに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"
]
}
}
}
}