gvalid 很适合处理请求参数的格式校验,比如必填、长度、范围、枚举。但它不应该替代业务规则。

例如“用户名必须 2 到 20 个字符”可以在入口层校验,“用户名是否已存在”应该在 service 中查询后判断。前者是输入格式,后者是业务状态。

type CreateReq struct {
    Name string `v:"required|length:2,20#名称不能为空|名称长度不正确"`
}

入口层校验失败直接返回 400 或业务参数错误;业务层校验失败返回明确业务码。两类错误分开,日志和监控也更容易分类。

校验放对位置,会让 service 不依赖 HTTP 细节,也让接口层不会背上业务状态判断。

分类: GoFrame 实践 标签: GoFrame gvalid 分层

评论

-- 评论已关闭 --

全部评论