HTTP框架 | 青训营笔记

64 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 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设置为:

用户模块:处理用户登录、注册、信息和关注等功能

视频模块:处理视频流、视频信息、视频发布、视频点赞等功能

评论模块:处理评论发布、评论列表等功能

消息模块:处理消息发送、消息列表等功能