iris原生支持restful路由,用app.get、post等方法配合路径参数(如/users/{id:uint64})即可;路径参数用ctx.params().get/getint64,查询参数用ctx.urlparam/urlparamint,json用ctx.readjson和ctx.json处理。

直接用 app.Get、app.Post 等方法注册路由,配合路径参数(如 /user/{id})和标准 HTTP 方法语义,就能构建符合 RESTful 风格的 API —— 不需要额外插件或抽象层,Iris 原生支持。
怎么写符合 RESTful 语义的路由
Iris 不强制你写 RESTful,但它的路由设计天然适配:用 HTTP 方法 + 资源路径表达意图,比如 /users 是集合,/users/{id} 是单个资源。
-
app.Get("/users")→ 查询用户列表 -
app.Get("/users/{id:uint64}")→ 查单个用户,{id:uint64}还带类型校验,非法值自动 404 -
app.Post("/users")→ 创建用户(body 提交 JSON) -
app.Put("/users/{id:uint64}")→ 全量更新 -
app.Patch("/users/{id:uint64}")→ 局部更新 -
app.Delete("/users/{id:uint64}")→ 删除
注意:Iris 不会自动校验请求体是否符合 RFC,比如 POST 必须有 body、PUT 必须带 ID —— 这些得你自己在 handler 里判断并返回 400 或 405。
怎么安全地取路径参数和查询参数
新手最容易把 ctx.Params().Get("id") 和 ctx.URLParam("id") 搞混。前者取 /users/123 里的 123,后者取 /users?id=123 里的 123。
- 路径参数必须用
ctx.Params().Get("name"),拼错名字(比如路由是{id}却调用Get("ID"))返回空字符串,不 panic,容易漏掉非空校验 - 要转类型,优先用
ctx.Params().GetInt64("id"),它失败时返回0, false,比手动strconv.ParseInt更安全 - 查询参数(
?page=1&limit=20)用ctx.URLParam("page"),也建议配合ctx.URLParamInt("page")直接转整数 - 表单字段(
application/x-www-form-urlencoded)用ctx.PostValue("username")
怎么处理 JSON 请求体和响应
Iris 默认不自动绑定 struct,但 ctx.ReadJSON() 和 ctx.JSON() 足够轻量直接。
- 接收 JSON:定义结构体,用
err := ctx.ReadJSON(&user),失败时err != nil,别忽略它 - 响应 JSON:直接
ctx.JSON(iris.Map{"code": 200, "data": user}),Iris 自动设Content-Type: application/json - 如果要统一响应格式(比如都包一层
{"code":..., "msg":..., "data":...}),别在每个 handler 里重复写,抽成一个函数或中间件,但注意中间件里不能提前写响应体,否则ctx.Next()后会 panic - 对错误响应,推荐显式调用
ctx.StatusCode(400)再ctx.JSON(...),避免依赖默认状态码
为什么 PUT/PATCH/DELETE 有时收不到请求体
不是 Iris 的问题,而是客户端或代理(比如 Nginx、某些浏览器插件)可能默认不转发这些方法的 body,或者前端发请求时没设 Content-Type: application/json。
- 先用
curl -X PUT http://localhost:8080/users/123 -H "Content-Type: application/json" -d '{"name":"a"}'确认服务端能收到 - 在 handler 开头加
body, _ := io.ReadAll(ctx.Request().Body)打印原始 body,排除前端发送问题 - Iris 的
ctx.ReadJSON()依赖Request.Body可读,如果 body 已被其他中间件读过(比如日志中间件用了ctx.RecordRequestBody(true)但没重置),就会读到空 - 开发时建议打开 logger 中间件:
app.Use(logger.New()),它会打印方法、路径、状态码、耗时,方便快速定位是 405 还是 400
真正容易被忽略的是:RESTful 是一种设计风格,不是协议规范。Iris 给你工具,但要不要做资源版本控制、HATEOAS、条件请求(If-Match)、标准错误码映射,得根据实际业务权衡 —— 别为了“看起来 RESTful”而堆砌不必要的约束。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











