这是我参与「第五届青训营 」伴学笔记创作活动的第11天。
前言
前文大致介绍了一下我实现用户登录接口服务实现的思路与方式,今天来简单说一下用户信息获取接口服务实现的方式。
主体思路
首先我们需要拿到被获取信息用户的Id,自己的token:代表你登陆了,也就是接口文档中的传入参数user_id``token,我们同样使用c.Query方法来提取传入参数以及生产存在布尔值:
user_id, user_idBool := c.GetQuery("user_id")
_, tokenBool := c.GetQuery("token")
值得注意的是,此处我们使用_来占位了传入参数token的实际值,为什么呢?
首先我们不需要使用到这个参数token,因为我们不止可以浏览自己的信息,还需可以获取其他人的信息,所以我们并不需要对这个token做具体的验证判定。由于go是一门强类型静态语言,所有声明定义过的变量均需被使用,所以我们使用_进行占位防止报错。
随后老规矩,进行一下传入参数判定:
if !user_idBool || !tokenBool {
//返回失败响应
return
}
接下来连接数据库,在数据库中查询传入的user_id是否存在,如果存在,返回用户的信息。同样的,我们链式使用Where方法与First方法,将返回值赋值给result变量,随后对result变量调用Error方法,创建失败分支:
if result.Error != nil {
//返回失败响应
return
}
如果没有进入以上两个分支,我们就需要返回成功响应,文档中返回响应其实是由两个结构体组成的:
type ApifoxModel struct {
StatusCode int64 `json:"status_code"`// 状态码,0-成功,其他值-失败
StatusMsg *string `json:"status_msg"` // 返回状态描述
User *User `json:"user"` // 用户信息
}
// User
type User struct {
FollowCount int64 `json:"follow_count"` // 关注总数
FollowerCount int64 `json:"follower_count"`// 粉丝总数
ID int64 `json:"id"` // 用户id
IsFollow bool `json:"is_follow"` // true-已关注,false-未关注
Name string `json:"name"` // 用户名称
}
我们需要对这两个结构体进行传值,最后再用ApifoxModel结构体进行成功响应返回。
注册路由
此处的注册路由稍有特殊,可以看到官方文档给的路由是/douyin/user/,由于我们最开始的主路由组为douyin,其下的子路由组名为user,所以我们需要将用户信息获取接口的路由注册为/,并且为GET方法:
userGroup.GET("/", Service.Getinfo)
以上完成了用户信息获取服务的简单实现。