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配置;(==治标不治本,后续仍然存在匹配错误的风险==)

结论

    1. 删除无效路由;
    1. 目前官方也未做优化,先保持现状,通过配置阶段补充校验进行规避。