千家信息网

如何使用自动验证restful api请求参数

发表于:2025-02-05 作者:千家信息网编辑
千家信息网最后更新 2025年02月05日,本篇内容介绍了"如何使用自动验证restful api请求参数"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学
千家信息网最后更新 2025年02月05日如何使用自动验证restful api请求参数

本篇内容介绍了"如何使用自动验证restful api请求参数"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

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有三种:

  • path:http url 路径中参数反序列化

    • /order/add/1234567会解析出来token为1234567

  • form:http form表单反序列化,需要 header头添加 Content-Type: multipart/form-data

    • /order/find/1234567?page=1&pageSize=20会解析出来token为1234567,page为1,pageSize为20

  • json:http request json body反序列化,需要 header头添加 Content-Type: application/json

    • {"productId":"321","num":1}会解析出来productId为321,num为1

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)}

数据校验有很多种方式,包括以下但不限:

  • age:默认不输入为20,输入则取值范围为(12:100],前开后闭

  • name:必填,不可为空

  • alias:选填,可为空

  • sex:必填,取值为malefemale

  • avatar:选填,默认为default.png

    "如何使用自动验证restful api请求参数"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

    0