Description
OpenAPI 3.0 component names under components.schemas, responses, parameters and similar maps cannot contain spaces or unsupported special characters. Names must contain one or more ASCII letters, digits, periods (.), hyphens (-) or underscores (_).
Potential impact
- Specification validation may fail, or tools may handle the name inconsistently.
- Inconsistent name handling can disrupt reference resolution or code generation.
Remediation
Remove spaces and unsupported characters from component names. Update every $ref to a renamed component and check references in external documents as well. Validate the resulting names and reference paths.
Examples
These examples compare a component name containing a space with a name that removes it.
Before
json
{
"openapi": "3.0.0",
"info": {
"title": "Simple API Overview",
"version": "1.0.0"
},
"paths": {
"/": {
"get": {
"operationId": "listVersionsv2",
"summary": "List API versions",
"responses": {
"200": {
"description": "200 response",
"content": {
"application/json": {
"examples": {
"foo": {
"value": {
"versions": [
{
"status": "CURRENT",
"updated": "2011-01-21T11:33:21Z",
"id": "v2.0",
"links": [
{
"href": "http://127.0.0.1:8774/v2/",
"rel": "self"
}
]
}
]
}
}
}
}
}
}
}
}
}
},
"components": {
"schemas": {
"General Error": {
"type": "object",
"discriminator": {
"propertyName": "petType"
},
"properties": {
"code": {
"type": "string",
"format": "int32"
},
"message": {
"type": "string"
}
},
"required": [
"petType"
]
}
}
}
}
After
json
{
"openapi": "3.0.0",
"info": {
"title": "Simple API Overview",
"version": "1.0.0"
},
"paths": {
"/": {
"get": {
"operationId": "listVersionsv2",
"summary": "List API versions",
"responses": {
"200": {
"description": "200 response",
"content": {
"application/json": {
"examples": {
"foo": {
"value": {
"versions": [
{
"status": "CURRENT",
"updated": "2011-01-21T11:33:21Z",
"id": "v2.0",
"links": [
{
"href": "http://127.0.0.1:8774/v2/",
"rel": "self"
}
]
}
]
}
}
}
}
}
}
}
}
}
},
"components": {
"schemas": {
"GeneralError": {
"type": "object",
"discriminator": {
"propertyName": "petType"
},
"properties": {
"code": {
"type": "string",
"format": "int32"
},
"message": {
"type": "string"
}
},
"required": [
"petType"
]
}
}
}
}
General Error becomes GeneralError, using only permitted characters. Any references must be updated to match the new name exactly.