如何在restful中设计bool查询
我有这样一个用户模型:如何在restful中设计bool查询,rest,go,boolean,Rest,Go,Boolean,我有这样一个用户模型: 类型用户结构{ 名称字符串 启用布尔//这是一个布尔字段 在线布尔//这是布尔字段 //其他领域。。。 } 创建用户时: POST /api/v1/users { "name": "hello", "enabled": true // option, default is true } 创建请求模型是: 输入CreateUserReq结构{ 名称字符串 已启用布尔//但golang默认值为false } 列出用户时: GET /api/v1/us
类型用户结构{
名称字符串
启用布尔//这是一个布尔字段
在线布尔//这是布尔字段
//其他领域。。。
}
创建用户时:
POST /api/v1/users
{
"name": "hello",
"enabled": true // option, default is true
}
创建请求模型是:
输入CreateUserReq结构{
名称字符串
已启用布尔//但golang默认值为false
}
列出用户时:
GET /api/v1/users // list all users, but golang default value is false
GET /api/v1/users?enabled=true // list enabled users
GET /api/v1/users?enabled=false // list disabled users
列表请求模型为:
类型ListUserReq结构{
状态布尔//但golang默认值为false
}
解决这个问题的常用方法是什么?没有初始值的变量被赋予零值。 对于布尔类型,零值为
false
您可以使用bool
指针,其零值为nil
。然后您可以检查是否已启用
是否已设置。如果已启用
为nil
,则签入处理程序,然后将默认情况设置为true
type CreateUserReq struct {
Name string
Enabled *bool
}
布尔值的默认值在几乎所有语言中都是false,因此这对于您的许多客户机来说可能是个问题。考虑将字段重命名为“禁用”。如果您不想这样做,请使用Eklavya回答中解释的指针。@Peter如果重命名为“disabled”则仍然使用“listAll”unnatural@Peter如果我将字段类型更改为字符串,并定义“const UserEnabled”和“const UserDisabled”,这是通常的做法吗?不是。将字符串用于固有的布尔值是一个糟糕的主意。这会给您和所有客户使用API带来很大不便。列表端点不是问题,因为在任何情况下都必须进行字符串比较(所有查询值都是字符串)。如果我将字段类型更改为字符串,并定义“const UserEnabled”和“const UserDisabled”,这是通常的做法吗?如果要区别对待“”(空字符串),使用布尔值作为字符串并使用字符串指针(如
*string
)。我不认为const
是请求主体的理想选择