如何从OpenAPI YAML文件提取校验属性生成JSON用于前端UI校验
从OpenAPI YAML提取校验规则生成JSON的可行方案
方案1:复用现有openapi-generator流程,自定义输出模板
这个方案不需要新增额外工具,直接适配你已经在用的npx @openapitools/openapi-generator-cli工作流:
- 新建自定义模板目录,比如命名为
openapi-templates - 在目录内新增
validationRules.mustache模板文件,示例内容如下,可根据你需要的JSON结构调整:
{ {{#models}} "{{classname}}": { {{#vars}} "{{baseName}}": { {{#minimum}}"minimum": {{minimum}},{{/minimum}} {{#maximum}}"maximum": {{maximum}},{{/maximum}} {{#maxLength}}"maxLength": {{maxLength}},{{/maxLength}} {{#minLength}}"minLength": {{minLength}},{{/minLength}} {{#pattern}}"pattern": "{{pattern}}"{{/pattern}} }{{^-last}},{{/-last}} {{/vars}} }{{^-last}},{{/-last}} {{/models}} }
- 执行生成命令时新增
-t参数指定模板目录即可:
npx @openapitools/openapi-generator-cli generate -i 你的openapi文件路径.yaml -g typescript-axios -o 代码输出目录 -t ./openapi-templates
- 生成完成后,输出目录会同时包含原有TS接口、axios请求代码,以及你需要的校验规则JSON文件,两者完全同步。
方案2:写轻量Node.js脚本自主解析
如果不想修改生成器配置,也可以用几十行代码快速实现自定义提取,灵活度更高:
- 先安装依赖:
npm install js-yaml fs-extra
- 新建
extract-validation.js脚本,示例逻辑如下:
const yaml = require('js-yaml') const fs = require('fs-extra') // 读取解析OpenAPI文件 const openapiContent = fs.readFileSync('你的openapi文件路径.yaml', 'utf8') const openapiSchema = yaml.load(openapiContent) const validationRules = {} // 遍历所有模型提取校验属性 Object.entries(openapiSchema.components.schemas).forEach(([modelName, modelSchema]) => { validationRules[modelName] = {} Object.entries(modelSchema.properties).forEach(([propName, propSchema]) => { validationRules[modelName][propName] = {} ;['minimum', 'maximum', 'maxLength', 'minLength', 'pattern'].forEach(rule => { if (propSchema[rule] !== undefined) { validationRules[modelName][propName][rule] = propSchema[rule] } }) }) }) // 输出为JSON文件 fs.writeJSONSync('./validation-rules.json', validationRules, { spaces: 2 })
- 可以把脚本执行命令和openapi-generator的生成命令串行配置在package.json的scripts里,保证每次生成接口时自动同步更新校验规则。
方案3:使用专门的Schema转换工具
如果你的前端项目用了Zod、Yup、AsyncValidator这类常用校验库,可以直接找对应的OpenAPI Schema转对应校验规则的开源包,不需要自己写解析和映射逻辑,一步生成可以直接用的校验配置。
内容的提问来源于stack exchange,提问作者druveen
相关产品推荐
相关产品推荐

