首页 > 应用开发 > IT综合 > 如何高效定义和验证restful请求的参数
go-zero针对文本的序列化和反序列化主要在三个地方使用:
1. http api请求体的反序列化
在反序列化的过程中的针对请求数据的数据格式以及数据校验需求,go-zero实现了自己的一套反序列化机制
1.1 数据格式以订单order.api文件为例
type (
createOrderReq struct { token string `path:"token"` // 用户token
productId string `json:"productId"` // 商品ID
num int `json:"num"` // 商品数量
} createOrderRes struct { success bool `json:"success"` // 是否成功
} findOrderReq struct { token string `path:"token"` // 用户token
page int `form:"page"` // 页数
pageSize int8 `form:"pageSize"` // 页大小
} findOrderRes struct { orderInfo []orderInfo `json:"orderInfo"` // 商品ID
} orderInfo struct { productId string `json:"productId"` // 商品ID
productName string `json:"productName"` // 商品名称
num int `json:"num"` // 商品数量
} deleteOrderReq struct { id string `path:"id"`
} deleteOrderRes struct { success bool `json:"success"` // 是否成功
}
)service order { @doc( summary: 创建订单
) @handler CreateOrderHandler
post /order/add/:token(createOrderReq) returns(createOrderRes) @doc( summary: 获取订单
) @handler FindOrderHandler
get /order/find/:token(findOrderReq) returns(findOrderRes) @doc( summary: 删除订单
) @handler: DeleteOrderHandler
delete /order/:id(deleteOrderReq) returns(deleteOrderRes)
}
http api请求体的反序列化的tag有三种:
1.2 数据校验以用户user.api文件为例
type (
createUserReq struct {
age int8 `json:"age,default=20,range=(12:100]"` // 年龄
name string `json:"name"` // 名字
alias string `json:"alias,optional"` // 别名
sex string `json:"sex,options=male|female"` // 性别
avatar string `json:"avatar,default=default.png"` // 头像
}
createUserRes struct {
success bool `json:"success"` // 是否成功
}
)
service user {
@doc(
summary: 创建订单
)
@handler CreateUserHandler
post /user/add(createUserReq) returns(createUserRes)
}
数据校验有很多种方式,包括以下但不限:
2. http api返回体的序列化
使用官方默认的encoding/json包序列化,在此不再累赘。
3. 配置文件的反序列化
配置文件的反序列化和http api请求体的反序列化使用同一套解析规则,可参照http api请求体的反序列化。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69923331/viewspace-2728447/ ,如需转载,请注明出处,否则将追究法律责任。