iris中接口地址由显式注册的路径字符串直接决定,如app.get("/users", handler)的地址即为/users,不自动添加前缀或推导;需用party管理版本前缀(如/v1),命名参数如{id:int64}影响匹配规则,404多因方法不匹配、大小写错误或未启动服务。

路由注册方式决定接口地址生成逻辑
在 Iris 中,接口地址不是“生成”的,而是由你注册路由时写的路径字符串直接决定的。比如 app.Get("/users", handler),这个 /users 就是最终暴露的接口地址,没有额外拼接或模板渲染过程。
常见误区是以为 Iris 会自动加前缀、版本号或根据结构体字段推导路径——它不会。所有路径都必须显式声明。
- 根路径必须以
/开头,否则 Iris 会 panic(如app.Get("users", ...)报错) - 路径中支持命名参数:
/user/{id:string}、/post/{slug:string regexp(^[a-z0-9]+(?:-[a-z0-9]+)*$)} - 通配符仅支持
{path:path}形式,不能写成*或** - 子路由器(
app.Party("/api"))会把前缀叠加到其下所有路由,这是组织接口地址最常用的方式
用 Party 管理带版本的 API 地址
实际项目中,接口地址常需带版本前缀(如 /v1/users)。Iris 的 Party 是唯一推荐做法,它返回一个子引擎,所有在其上调用的 Get/Post 等方法,路径都会自动拼上前缀。
apiV1 := app.Party("/v1")
{
apiV1.Get("/users", usersHandler)
apiV1.Post("/users", createUserHandler)
}
apiV2 := app.Party("/v2")
{
apiV2.Get("/users", usersV2Handler) // 实际地址是 /v2/users
}
注意:Party 不是中间件,也不影响请求流程;它只是路径前缀的语法糖。多个 Party 可嵌套,但不建议超过两层,否则路径可读性下降。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
-
Party返回的实例可重复使用,比如再调authAPI := apiV1.Party("/auth") - 不要在
Party路径末尾加斜杠("/v1/"),Iris 会自动处理拼接 - 如果需要全局统一前缀(如所有 API 都走
/api),直接在根Party上做:api := app.Party("/api")
命名参数和通配符如何影响最终 URL
接口地址中的动态段由命名参数定义,它们直接影响客户端能访问到的真实路径。例如 /user/{id:int64} 允许请求 GET /user/123,但拒绝 /user/abc(因为类型校验失败)。
这类参数不改变基础路径结构,但决定了哪些 URL 会被匹配、哪些被 404 或 400。
-
{id:uint64}和{id:int64}行为不同:前者拒绝负数,后者接受 - 正则约束写在
regexp(...)里,内容必须是完整正则字面量(不能省略起止符),例如{name:string regexp(^[\w-]{3,20}$)} -
{path:path}必须放在路径末尾,且只能出现一次,用于捕获剩余全部路径段(类似 echo 的*path) - 参数名区分大小写,
{ID:int64}和{id:int64}是两个不同参数
为什么你的接口地址 404?几个高频原因
路由注册后访问 404,通常不是 Iris “没生成地址”,而是路径没对上。重点检查这几处:
- HTTP 方法不匹配:注册了
app.Post("/login", ...),却用 GET 请求/login - 路径大小写错误:Linux 环境下
/Users≠/users,而 Iris 默认严格区分 - 未启动服务器:只写了路由没调
app.Listen(...),自然无法访问 - 路由注册顺序问题:更具体的路由要写在更宽泛的前面,否则
app.Get("/{path:path}", fallback)会拦截所有请求 - 开发时用了
app.WrapRouter却忘了调用原 router,导致路由表为空
调试时直接打印路由表:app.PrintRoutes(),运行后终端会输出所有已注册的 METHOD + PATH + HANDLER,这是最可靠的验证方式。










