简易的抖音服务器
Service Name | Usage | Framework | Protocol | Path | IDL | database |
---|---|---|---|---|---|---|
api | http interface | Hertz/Kitex | Thrift | tiktok_server/cmd/api | IDL/apiServer | |
user | user data management | Kitex/gorm | Thrift | tiktok_server/cmd/user | IDL/userServer | MySQL |
video | video(feed) management | Kitex/gorm | Thrift | tiktok_server/cmd/video | IDL/videoServer | MySQL |
relation | relation(follow&friend) data management | Kitex | Thrift | tiktok_server/cmd/relation | IDL/relationServer | Dgraph |
favorite | video favorite data management | Kitex/gorm | Thrift | tiktok_server/cmd/favorite | IDL/favoriteServer | MySQL&Redis |
comment | comment data management | Kitex/gorm | Thrift | tiktok_server/cmd/comment | IDL/commentServer | MySQL |
用户:注册、登录、获取用户信息
视频:上传视频、获取feed流
关系:支持对用户的关注、取关操作,互关用户互为好友
点赞:支持对视频的点赞、取消操作
评论:支持对视频的评论操作
-开发注意事项--------------------------------------------------------------
- 在IDL文件夹下创建新的服务文件夹,存放thrift文件
- 在cmd文件夹下创建新的服务文件夹,存放可运行程序
- 编写thrift文件
- 在 第2步 中创建的文件夹下执行kitex工具生成代码(例如
kitex -module "github.com/PCBismarck/tiktok_server/cmd/user" -service a.b.c ../../IDL/userServer/user.thrift
) - 在生成的main.go文件中编辑服务器地址和端口(提供本服务的地址端口)
- 在生成的handler.go文件中完事业务逻辑
- 在 cmd/api/biz/rpc/ 下创建自己服务的rpc文件
- 在该文件中需要初始化对应服务的 service.client
- 通过对应的client访问微服务
- 在 cmd/api/biz/handler/ 中使用rpc文件中的函数
在/api 下的加入以下语句即可解析出uid
// 鉴权并获取uid
mw.JwtMiddleware.MiddlewareFunc()(ctx, c)
user, ok := c.Get(mw.JwtMiddleware.IdentityKey)
if !ok {
return
}
uid := user.(*shared.User).ID
例如修改feed的处理函数:
// Feed .
// @router /douyin/feed/ [GET]
func Feed(ctx context.Context, c *app.RequestContext) {
var err error
var req basic.FeedRequest
err = c.BindAndValidate(&req)
if err != nil {
c.String(consts.StatusBadRequest, err.Error())
return
}
resp := new(basic.FeedResponse)
// 鉴权并获取uid
mw.JwtMiddleware.MiddlewareFunc()(ctx, c)
user, ok := c.Get(mw.JwtMiddleware.IdentityKey)
if !ok {
return
}
uid := user.(*shared.User).ID
resp.StatusCode = int32(uid)
msg := req.Token
resp.StatusMsg = msg
c.JSON(consts.StatusOK, resp)
}