OpenAPI Generator忽略带下划线请求头,OpenAPI 3.0是否禁用下划线?
问题:下划线请求头在OpenAPI验证中被忽略,规范是否禁止下划线?
我有一个OpenAPI 3.0.0描述文件,其中多个请求头标记了required: true,但名称含下划线的请求头unique_id被OpenAPI Generator忽略。
OpenAPI规范代码片段
openapi: 3.0.0 info: version: 0.0.1 servers: - url: http://localhost:3000/myapi paths: /place/{id}: get: x-eov-operation-id: find place x-eov-operation-handler: Ctrl parameters: - name: unique_id in: header required: true schema: type: string description: unique id - name: app-code in: header required: true schema: type: string description: unique id responses: <<continued with response definition>>
验证中间件代码片段
app.use( openapiValidator.middleware({ apiSpec: yaml.load(fs.readFileSync(swaggerFilePath)), validateRequests: true, operationHandlers: path.join(__dirname + '/api/controllers') }) )
现象:app-code的请求头验证正常,但unique_id的验证被跳过。将unique_id改为unique-id后验证恢复正常。
解答
OpenAPI 3.0规范本身并不禁止请求头名称使用下划线,HTTP标准(RFC 7230)也允许请求头包含下划线字符。出现这个问题的原因大概率是你使用的验证工具(express-openapi-validator)的默认行为导致的:
- 部分OpenAPI验证工具会默认遵循HTTP请求头的常见命名习惯(连字符分隔的kebab-case格式),对下划线格式的请求头支持不佳,甚至会自动转换名称格式,导致验证不匹配。
express-openapi-validator可能存在内部逻辑,将请求头名称转换为小写或kebab-case后再与规范匹配,下划线的unique_id被转换后无法和原定义对应,从而跳过验证。
解决建议
- 优先遵循HTTP请求头的通用命名规范,使用连字符分隔(如
unique-id),这样能最大化兼容各类工具和服务器。 - 若必须保留下划线格式,检查
express-openapi-validator的配置项,是否有可以关闭名称转换、开启严格匹配的选项,比如调整requestValidationOptions相关设置。 - 可以尝试在请求头参数定义中显式添加
style: simple,强制验证器使用原始名称进行匹配。
内容的提问来源于stack exchange,提问作者Rajnish Mishra
相关产品推荐
相关产品推荐

