説明
enum は許可する値の一覧を制限します。値は type など他の制約も同時に満たす必要があります。数値型に文字列だけを列挙すると、両方の条件を満たす値はありません。一部の値だけが型に合わない場合、その値は許可されません。
想定される影響
- 利用者が一覧の値を送っても、型の検証に失敗する場合があります。
- 文書や生成クライアントが、実際に受け入れられる値を誤って表す可能性があります。
対処方法
実際の API の型と許容値を確認し、enum と type を一致させてください。数字を表す文字列と数値を区別し、意図した値が他の制約も満たすことを確認してください。
例
OpenAPI 3.0 のレスポンススキーマの抜粋で、info は省略しています。変更前は数値型に文字列 "black" だけを許可するため、両方の条件を満たす応答値はありません。
変更前
json
{
"openapi": "3.0.0",
"paths": {
"/": {
"get": {
"responses": {
"201": {
"description": "Created",
"content": {
"text/html": {
"schema": {
"type": "number",
"enum": [
"black"
]
}
}
}
}
}
}
}
}
}
変更後
json
{
"openapi": "3.0.0",
"paths": {
"/": {
"get": {
"responses": {
"201": {
"description": "Created",
"content": {
"text/html": {
"schema": {
"type": "number",
"enum": [
1,
2,
3
]
}
}
}
}
}
}
}
}
}
変更後は数値の 1、2、3 を許可します。状態コード、メディアタイプ、値の一覧は実際のレスポンス仕様に合わせて選択してください。