使用 fiber 构建 restful api 须遵循其惯用法:路由参数需手动类型转换与校验,请求体必须用强类型结构体配合 bodyparser,状态码严格按语义返回,子路由应通过 group 显式隔离,且注意注册顺序避免路径匹配失效。

直接用 fiber.New() 启动一个能跑通的 RESTful API 很容易,但真要加校验、分组、中间件、状态码语义、参数安全转换,不按 Fiber 的惯用法来,很快会掉进隐性坑里。
路由参数提取后必须手动校验类型,不能直接当数字或 UUID 用
Fiber 的 c.Params("id") 永远返回字符串,哪怕你写了 /users/:id,它也不会自动转成 int 或 uuid.UUID。直接传给数据库查询或做算术运算,轻则查不到,重则 panic(比如 strconv.Atoi(""))或 SQL 注入(尤其拼 raw query 时)。
- 整数 ID:用
strconv.ParseUint(c.Params("id"), 10, 64),检查 error,别用MustParse类函数 - UUID:用
uuid.Parse(c.Params("id")),别靠正则粗筛([0-9a-f]{8}-...无法防../../../../etc/passwd这类路径遍历) - 所有参数提取后建议统一走
validator库校验,比如binding:"required,uuid"(需配合结构体 +c.Params手动赋值)
c.BodyParser() 必须配强类型结构体,禁用 map[string]interface{}
用 map[string]interface{} 接 POST/PUT 请求体,等于主动放弃字段校验、IDE 补全、Swagger 自动生成,还会导致零值覆盖——前端传 {"name": ""},后端结构体字段没设指针或 omitempty,DB 原值就被清空。
- 结构体字段必须首字母大写 +
json:"name"标签,漏掉就解码为空字符串或零值 - 必填字段加
binding:"required",邮箱加binding:"email",c.BodyParser()会自动返回fiber.StatusUnprocessableEntity(422) - 禁止在 handler 里手动调用
json.Unmarshal(),否则绕过 Fiber 的错误拦截,400 不进日志、不触发统一错误中间件
HTTP 状态码必须严格按语义返回,别全用 200 + code 字段
前端靠状态码做重试、缓存、fetch().catch() 分流。返回全用 200 + {"code": 404},fetch().then() 永远不会进 catch,错误流控彻底失效。
- 资源不存在必须用
c.Status(fiber.StatusNotFound)(404),不是 200 + null - 创建成功必须用
c.Status(fiber.StatusCreated)(201),并设Locationheader:c.Set("Location", "/users/"+id) - 业务校验失败(如手机号格式错)优先用
c.Status(fiber.StatusUnprocessableEntity)(422),比 400 更语义化 - 数据库连接失败应返回
c.Status(fiber.StatusServiceUnavailable)(503),500 只留给未捕获 panic
子路由和中间件作用域必须显式隔离,别混在同一个 app 实例下
Fiber 没有内置的“路由分组”概念,app.Group() 是社区封装的糖,底层仍是 app.Use() + app.Get() 组合。如果把 /orders 和 /users 的路由、中间件、错误处理都注册在同一个 fiber.App 实例下,Prometheus 标签、OpenAPI 分组、中间件作用域都会混乱。
- 用
app.Group("/api/v1")创建子路由前缀,并链式挂载中间件:apiV1 := app.Group("/api/v1"); apiV1.Use(logger(), auth()) - 不同业务域(如用户、订单、支付)建议拆成独立
fiber.Router,再挂到主 app,便于测试和复用 - 全局中间件(如 CORS、Recover)放最外层
app.Use();路由级中间件(如权限校验)只挂到对应Group下
最容易被忽略的是:Fiber 默认不校验路由注册顺序,但实际运行时,路径匹配是「从上到下逐条比对」。如果你把 app.Get("/users/:id", ...) 写在 app.Get("/users/me", ...) 前面,后者永远收不到请求——这点和 gorilla/mux 一致,但 Fiber 文档没强调,很多人踩了才意识到。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











