拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Swagger UI Schema 校验与错误标记实战

Swagger UI Schema 校验与错误标记实战【免费下载链接】swagger-uiSwagger UI is a collection of HTML, JavaScript, and CSS assets that dynamically generate beautiful documentation from a Swagger-compliant API.项目地址: https://gitcode.com/GitHub_Trending/sw/swagger-ui上周调试 Petstore 的 POST /petExecute 前输入框突然红框飘出一句Required field is not provided。我明明填了值。查了一圈才发现这是 Swagger UI 在发请求前做的 Schema 校验红色标记只是把本地预检失败的结果回显出来。搞懂这条链路上的每一环比反复改输入值有用得多。三类错误一张表错误标记到底在标什么看到红框先别急着改输入。Swagger UI 的错误横幅里混着三种来源完全不同的错误先分清再动手类型什么时候冒出来怎么处理spec 错误定义文档加载解析阶段比如 YAML 写坏、$ref 指向不存在改 specUI 会标出行号或 JSON paththrown 错误运行时抛出的 JS 异常或 OAuth2 授权失败看浏览器控制台参数校验错误点 Execute 前的本地 Schema 预检逐字段收集改输入值或改 schema显示逻辑在 错误横幅组件所有thrown错误无条件展示其余错误只展示error级别并按行号排序。一次校验的完整数据流从输入框到红框这节回答红框是怎么一步步算出来的。以参数校验为例整条链路 6 步点Try it out或Execute组件调用specActions.validateParams([path, method])动作定义见 spec 插件动作校验器按[path, method]取出该操作的全部参数。OpenAPI 2.0 读 parameter 上的schema3.x 读content里对应 media type 的 schema逐个参数进入validateValueBySchema位于 核心工具函数先判required再按type分派子检查字符串查 length 与 pattern数值查 min/max数组查 items、uniqueItemsobject 类型请求体会先尝试JSON.parse再对required属性逐项核对缺失子属性递归校验每条失败约束 push 一条带具体文案的 error 进数组全部通过后返回空数组selector 判断是否放行有错误就拦下请求、参数行标红执行成功后 40ms 延迟clearValidateParams清标记。OAS3 的 request body 还有一层独立的 required 检查在 oas3 插件 里文案同样是Required field is not provided排障时别只看 core 一处。三种高频校验失败怎么修现象、根因、最小改动场景一明明没漏填却报Required field is not provided现象字段填了值Execute 照样红框。根因值没匹配上 schema 声明的 type比如integer字段填了18.5类型检查不过时required 判定也跟着失败。最小修复schema: type: integer minimum: 0 maximum: 150场景二pattern 不生效或误报现象加pattern后校验时灵不灵或合法值被拦。根因正则写的是整串匹配思维但引擎按搜索模式跑特殊字符转义漏了。最小修复schema: type: string pattern: ^[0-9]{11}$场景三body 报Parameter string value must be valid JSON现象object 请求体一提交就报 JSON 非法。根因输入框里粘的是带外层引号的字符串化 JSONJSON.parse第一次就失败。最小修复把内容按裸 JSON 粘贴去掉最外层引号和转义{ name: doggie, photoUrls: [] }配置项与插件扩展在哪个 hook 注入校验默认配置基本够用验证不灵十有八九是 spec 或 URL 可达性问题。真要调行为看这四个键配置键默认值作用validatorUrlhttps://validator.swagger.io/validator在线验证徽章的服务地址徽章组件用它生成校验图片tryItOutEnabledfalse关闭后 Execute 不可点参数预检也不会触发deepLinkingfalse打开后可用 URL 锚点直接定位到出错的操作requestInterceptor透传请求发出前的最后拦截器可改写请求、做额外拦截想插自定义校验规则不用改 UI 代码。插件 API 里用statePlugins.spec.wrapActions包住validateParams先执行原函数再把自己的结果合并进错误数组。自定义错误保持{ pathMethod, errors }的形状每条 error 带上path和messageUI 就会照常用行号定位显示。写对 Schema 等于写好一半验证验证器不会猜。schema 里没写的约束它一律不查——required、type、format、pattern这四件套写全等于把将来大部分错误标记提前消灭在文档阶段components: schemas: Pet: type: object required: [name, status] properties: name: type: string minLength: 1 maxLength: 50 status: type: string enum: [available, pending, sold]验证不生效按顺序排查这 5 步确认该操作启用了 Try it outtryItOutEnabled为false时 Execute 不可点校验链路根本不会跑。在线验证徽章不显示时检查validatorUrl能否被页面访问、定义 URL 是否公网可访问徽章拉不到文档就静默消失。核对 spectype、required、约束字段是否写准约束缺失时本地校验会静默跳过。错误横幅默认可能折叠点 Show 展开banner 里按行号排序点行号可跳转编辑器定位。低版本对 pattern、object 属性递归校验支持不全升级到较新版本再复现一次。回到开头那个红框现在你知道它不是玄学而是本地逐字段预检被标出来的结果。下一步很具体——拿自己的 spec 在 Swagger UI 里把四件套补齐故意填一个违规值点一次 Execute确认错误横幅能定位到具体行号校验链路就算真正打通了。【免费下载链接】swagger-uiSwagger UI is a collection of HTML, JavaScript, and CSS assets that dynamically generate beautiful documentation from a Swagger-compliant API.项目地址: https://gitcode.com/GitHub_Trending/sw/swagger-ui创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门