Iris 框架巧妙地利用了父子关系实现路由分组与主应用的关联和路由匹配。app.Party("/v1") 并非直接将 /v1 路由分组添加到主应用 app 中,而是创建了一个新的 APIBuilder 对象(我们称之为 v1),并通过 v1.parent = app 建立了父子关系。 v1 继承了父级 app 的一些属性和方法,但同时拥有自己的路由定义空间。
关键在于 Iris 的路由处理机制。当一个请求到达时,Iris 不会直接在主应用 app 中查找路由。相反,它会根据请求路径进行匹配。 如果请求路径以 /v1 开头,Iris 会先在 v1 (即 APIBuilder 对象) 中查找匹配的路由。如果 v1 中没有找到匹配的路由,Iris 会沿着 v1.parent 属性递归向上查找,直到找到根 APIBuilder 对象(即 app)或者找到匹配的路由。
这种递归查找机制,结合父子 APIBuilder 对象的树状结构,实现了路由分组的灵活管理。 每个路由分组都拥有独立的路径前缀,而 Iris 通过递归查找 parent 属性,将这些分组的路由与主应用关联起来,最终完成路由匹配并执行相应的处理器。 因此,app 并不直接持有 v1 的所有路由信息,而是通过递归查找来间接访问 v1 及其子分组定义的所有路由。 这种设计使得路由管理更加清晰,易于维护和扩展。