Iris 版本分组需手动注册各版本路由,无自动多版本同步机制;中间件按注册顺序执行且不自动隔离;路径参数须显式声明类型;静态资源与错误页路由须置于所有 Party 之后。

iris.Party 用于版本前缀分组,不是多版本同步注册
直接用 app.Party("/v1") 和 app.Party("/v2") 分别注册,是 Iris 原生支持的最简方式。但要注意:Iris 没有内置“一次声明、多版本生效”的机制,每个版本必须独立调用 GET/POST 等方法。所谓“版本继承”在 Iris 中需手动实现,不能依赖框架自动广播。
中间件注册顺序决定执行链,版本分组不隔离全局中间件
如果你在主 app 上调用了 app.Use(authMiddleware),那么所有 Party(包括 /v1、/v2、/admin)都会执行它;而你在 v1 := app.Party("/v1") 后调用 v1.Use(versionV1Only),该中间件只对 /v1 下路由生效。常见错误是误以为 v1.Use() 会覆盖或替换全局中间件——实际是追加,顺序为:app.Use → v1.Use → handler。
- 中间件漏掉
ctx.Next(),会导致后续 handler 完全不执行 - 权限类中间件(如鉴权失败)必须跟
ctx.StopExecution(),否则流程继续向下 - 跨版本共享逻辑(如统一响应包装)应放在
app.UseGlobal()或公共中间件包里,而非重复写在每个Party中
路径参数类型必须显式声明,否则 ctx.Params().GetUint64("id") panic
Iris 不自动推断参数类型。比如 v1.Get("/user/{id}", handler) 中的 {id} 是字符串,调用 ctx.Params().GetUint64("id") 会 panic;必须写成 {id:uint64} 才能安全解析。这个细节在多版本路由中极易被忽略,尤其当 v1/v2 接口路径一致但 v2 新增了强类型校验时。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
-
/v1/user/{id}→id是 string,GetUint64失败 -
/v2/user/{id:uint64}→id可直接转 uint64 - 若 v1 也要强校验,必须同步改为
{id:uint64},否则 v1 调用会 404(因路由树匹配失败)
静态资源和错误页路由必须放在所有 API 分组之后
像 app.HandleDir("/public", "./public/") 或 app.OnAnyErrorCode(...) 这类兜底路由,如果写在 app.Party("/v1") 之前,会被优先匹配,导致 API 路由失效;如果写在中间,可能被某个 Party 的 Use() 干扰。唯一安全位置是所有 Party 注册完成之后、app.Run() 之前。
复杂点在于:不同版本可能共用同一套静态资源,但错误页又需要按版本定制(如 v1 返回 JSON 错误,v2 返回带 traceID 的结构体)。这时不能靠路由分组控制,得在 OnAnyErrorCode 里手动检查 ctx.Request().URL.Path 前缀再分支处理。


















