这是我参与「第五届青训营 」伴学笔记创作活动的第 12 天
本文记录抖音极简版项目中http框架的部署运用
路由
本项目规定路由接口:
基础接口:
视频流接口 /douyin/feed/
视频投稿 /douyin/publish/action/
发布列表 /douyin/publish/list/
用户注册接口 /douyin/user/register/
用户登录接口 /douyin/user/login/
用户信息 /douyin/user/
互动接口:
点赞操作 /douyin/favorite/action/
喜欢列表 /douyin/favorite/list/
评论操作 /douyin/comment/action/
视频评论列表 /douyin/comment/list/
社交接口:
用户关联操作 /douyin/relation/action/
用户关注列表 /douyin/relation/follow/list/
用户粉丝列表 /douyin/relation/follower/list/
用户好友列表 /douyin/relation/friend/list/
聊天记录 /douyin/message/caht/
消息操作 /douyin/message/action/
使用hertz分组路由,将以上路由分为若干个组,例如:
user := h.Group("/douyin/user") //用户组
{
user.GET("/login/", func(c context.Context, ctx *app.RequestContext) {
})
}
relation := h.Group("/douyin/relation") //关系组
{
relation.GET("/follow/list/", func(c context.Context, ctx *app.RequestContext) {
})
}
中间件
项目要求对于需要用户登录进行的操作需要携带token进行验证,因此创建middleware层对于用户的登录和其他操作进行验证
其中使用jwt进行token发布和认证
对于点赞、评论等操作,在http请求中获取当前用户id和token进行中间件验证,验证不通过返回错误信息提示
func JWTMiddleWare() gin.HandlerFunc {
return func(c *gin.Context) {
tokenStr := c.Query("token")
if tokenStr == "" {
tokenStr = c.PostForm("token")
}
//若用户不存在
if tokenStr == "" {
//阻止执行
}
//验证token
tokenStruck, ok := ParseToken(tokenStr)
if !ok {
c.JSON(http.StatusOK, models.CommonResponse{
StatusCode: 403,
StatusMsg: "用户验证失败",
})
//阻止执行
}
//token验证超时
if time.Now().Unix() > tokenStruck.ExpiresAt {
c.JSON(http.StatusOK, models.CommonResponse{
StatusCode: 402,
StatusMsg: "用户验证过期",
})
//阻止执行
}
//设置用户token和id匹配
}
}
应用
应用层主要包括Server、Client和一些其他通用抽象。定义大量处理函数(HandlerFunc)使用gin.context上下文,将主要服务api设置为:
用户模块:处理用户登录、注册、信息和关注等功能
视频模块:处理视频流、视频信息、视频发布、视频点赞等功能
评论模块:处理评论发布、评论列表等功能
消息模块:处理消息发送、消息列表等功能