跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 如何设计 restful bool 查询?
未分類
30 5 月 2020

如何设计 restful bool 查询?

如何设计 restful bool 查询?

資深大佬 : darklowly 1

假设有如下模型:

type User struct {     Name    string     Enabled bool  // 这是一个 bool 类型的字段     Online  bool  // 这是一个 bool 类型的字段      //     // 其他字段...     // } 

那么在设计 restful 接口的时候,应该如何支持如下功能:

1 创建一个用户

POST /api/v1/users {     "name": "hello",     "enabled": true // 可选,默认为 true } 
// 对应的 golang 结构为 type CreateUserReq struct {     Name    string     Enabled bool // 注意:这里是有问题的 } 

2 查询所有用户,支持查询 [全部用户] [活跃用户] [不活跃的用户]

GET /api/v1/users               // 查询全部用户 GET /api/v1/users?actived=true  // 查询活跃用户 GET /api/v1/users?actived=false // 查询不活跃用户 
// 对应的 golang 结构为 type ListUserReq struct {     Enabled bool // 注意:这里是有问题的 } 

我现在能想到的方法有 5 种:

方法零:修改 Enabled 字段为 Disabled 不算是一种方法,因为在查询所有用户的时候,还是会有问题

方法一: 坚持用 bool,那么在解析 http 请求的时候,需要放弃 struct,用 map

方法二: 用 bool 指针,代码检测会很麻烦,因为指针可能为 nil,不小心会引入 panic

type CreateUserReq struct {     Name    string     Enabled *bool // 这里是指针 } 

方法三:用 int,0 表示关闭,1 表示开启,因为 golang 有默认值,所以这种方案比 bool 还差

const (     Disabled = 0 // 注意     Enabled  = 1 // 注意 )  type CreateUserReq struct {     Name    string     Enabled int // 注意 } 

方法四:用 int,1 表示关闭,2 表示开启,但是会违反程序员的直觉,因为程序员的直觉会觉得 0 是 false,其他为 true

const (     Disabled = 1 // 注意     Enabled  = 2 // 注意 )  type CreateUserReq struct {     Name    string     Enabled int // 注意 } 

方法五:用字符串表示,actived 表示活跃,inactived 表示不活跃

const (     Enabled  = "enabled"  // 注意     Disabled = "disabled" // 注意 )  type CreateUserReq struct {     Name    string     Enabled string // 注意 } 

请问一般解决这种问题的惯用方法是什么?

大佬有話說 (0)

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具