2020年5月8日
|
阅读 |共678字,阅读约 2 分钟
API匹配流程:find_api
- 1,检查是否需要提取method参数进行匹配(openapi逻辑);
- 2,直接获取历史匹配缓存数据;
- 3,检查host,uri,method分别是否存在匹配项,进行打标;
- 4,根据打标,获取实际的API配置列表进行匹配,精度由细到粗(host+uri+method > host+uri > host+method > method + uri > host > uri > method)
- 4.1 对匹配的API列表进行reduce;(含义:提取优先匹配项(从host,uri,method三者各自匹配列表中,取出条目最少的一组),提取完整API列表项)
- 4.2 从优先匹配项中进行匹配;
- 4.3 优先匹配失败,从完整API列表项中匹配;
- 4.4 如果仍然匹配失败,则从次级精度API信息列表中重新匹配;(重复4.1-4.4流程)
当前请求匹配流程:
- 1,host,uri,method三者均有匹配项,因此三个都被打标;
- 2,在host+uri+method 匹配时,优先匹配项取到了:yanuxan.actfoward.default(即命中了uri的匹配列表,其中只有一项数据)
- 3,对优先匹配项进行匹配时,实际host不匹配,退化为从完整API列表项中进行匹配;
- 4,实际在完整API列表匹配时,依次匹配,返回首个匹配项;(==问题点:该列表没有对path长度做排序,由于数组中activity.act.default顺序在yanxuan.act.forward之前,导致被提前匹配并返回!==)
处理
- 删除无效的API配置;(==治标不治本,后续仍然存在匹配错误的风险==)
结论
-
- 删除无效路由;
-
- 目前官方也未做优化,先保持现状,通过配置阶段补充校验进行规避。