restful 风格 api 的一些疑问
给用户分配角色有如下两个设计
POST /api/v1/user/assign-roles
{ userID: 1, roleIDs: [1,2,3] }
/api/v1/user/:id/roles
{ roleIDs:[1,2,3] }
我喜欢第一种方式,原因有两个
- 参数全部在一起,后端一个结构体直接全部接收
- 后端的方法只需要一个入参参数,如下
func (i *RoleService) AssignRoleToUser(req *AssignRoleToUser) error { ... }
第二种则需要两个参数,我不喜欢这种,不喜欢的原因如下(但是 GPT,豆包回答都推荐这种方式)
- 接收参数需要多一行代码去接收id,然后再接收参数
- 方法入参变成了两个
- 方法名称意义模糊
func (i *RoleService) AssignRoleToUser(userID uint, req *AssignRoleToUser) error { .... }
大家觉得哪一种更好,为什么?如果都不好,那么更好的应该是什么样子的?
第二种更符合rest,第一种就是古早的逻辑
实际工作中第二种偏多。看上去要多做一次获取值的逻辑,但其实工作中的项目基本在路由注册层面对id就有了定义,做好了处理,内部处理逻辑可以直接取