在本Lab中,你拥有以下三个选择:
- 参加 2024 年服务外包创新创业大赛(此项需求需同组长商量)
- 完成MIT 6.824 分布式系统 (2024 Spring)的 lab2
- 完成以下内容
- 掌握HTTP协议和Web工作原理
- 掌握现代 HTTP 框架开发流程
- 掌握数据库的增删改查(CRUD)及基础的数据库表设计
- 入门简单的缓存引入和使用
- 入门简单的项目设计模式
金三银四来了!FanOne 正在准备面试,由于过于卷,于是想放松一下看一下番剧,可惜她又没有大会员
,FanOne现在很苦恼
请你写一个视频网站(写 API 文档接口即可),让LWGG能在没有大会员的条件下开心的追番吧!
请遵照以下接口文档完成功能
你不必完成以上的全部功能,以下完成本次作业的最低要求(共计 17 个接口,已经非常少了)
模块名 | 最低需要完成的接口 | 数量 |
---|---|---|
用户 | 注册、登录、用户信息、上传头像 | 4 |
视频 | 投稿、发布列表、搜索视频、热门排行榜 | 4 |
互动 | 点赞操作、点赞列表、评论、评论列表、删除评论 | 5 |
社交 | 关注操作、关注列表、粉丝列表、好友列表 | 4 |
别看很多,中间我们还砍掉了以下内容
除了上面没列出的接口外,你还不需要完成这些
- 不需要考虑性能,只需要完成项目即可
- 不需要考虑设计模式/项目结构,只需要完成项目即可
- 不需要考虑其他七七八八的,只需要跑通接口即可
- 互动模块:评论接口只要求完成对视频的点赞,即 comment_id 字段的功能不需要实现,我们只需要你完成对视频的评论即可,不需要实现对评论进行评论
- 互动模块:点赞操作只要求完成对视频的点赞,不需要处理对评论的点赞
- 视频模块:投稿接口不要求实现分片上传和分布式存储,你只需要做到可以正常接收文件,并保存到本地某个目录下即可
- 社交模块:不需要完成 WebSocket 部分
- 分页管理:如果参数带有 page_num 和 page_size,需要正确识别并进行分页
- 视频搜索:考察简单的 SQL,因此搜索条件需要全部满足
- 删除评论:不可删除其他人的评论
- 需要支持双 Token
- 不要再用 Gin 了,请使用 Hertz/Kratos/其他现代 HTTP 框架,并且要求使用自动生成开发脚手架(如 Hertz 提供的 hz 工具以及 kratos 中集成的 protobuf)
- 为你的项目提供一份项目结构图(目录树)
- 完成Docker部署(编写Dockerfile并且利用这个文件成功部署你的项目,不要求传镜像到 hub 上)
- 请求和返回结构必须遵循接口文档
- 实现全部接口的全部功能
- 对点赞操作引入 Redis 缓存
- 不使用文档中的投稿接口,改用自己设计接口,以实现视频的分片上传与存储
- 实现WebSocket 聊天功能
- 引入 ElasticSearch,加强项目的日志管理(这里不做过多赘述,没有对日志管理做过高要求,如果你项目中有针对日志做一些处理,答辩的时候可以提出来)
- Apifox 里可以直接调试哦
- HTTP 库建议使用 Hertz:https://www.cloudwego.io/zh/docs/hertz/
- 请关注项目的返回结构,我们特别设计了返回结构,你可以设计几个 Model 实现 User、Comment、Video 结构来进行复用
- 请关注你项目的逻辑,尤其是社交部分
- 请注意你的数据库表设计,尤其是互动和社交部分
- 热门排行榜考察的是你的 Redis 引入和使用,只需要中间使用到了 Redis 就行(例如,用户请求一次后你将排行榜存在 redis,后续请求直接从 redis 从,不考虑过深的逻辑)
- 下半年的全部作业,都会要求你在本次项目的基础上进行增添和修改,请认真对待你的项目结构
- 这次作业会考察关系型数据库表的设计以及你的设计模式、项目结构规范,如果你认为你以上几个可能写的不理想,建议提前实现剩余接口和不要求完成的内容,下一次答辩后会要求你修改你项目中不合理的结构和表设计
不要过度关注CURD的内容,请将目标放在下面这些
- 项目架构是否合理
- 数据库设计是否合理
- 是否对新技术(如Redis)的使用相对合理
- 每一个接口的逻辑是否正确(例如,在上传视频时是否考虑到了用户是否登录?)
- 你的接口能否支撑住多人访问?
- 当你使用缓存后,是否能避免出现缓存穿透,缓存雪崩等情况?
- 在你这次写的项目基础上,实现接口文档的全部功能
- 在答辩的批斗大会后,依据设计模式/项目结构规范修改你的项目
- 在答辩的批斗大会后,依据数据库性能优化实践优化你的数据库设计
- 使用 CICD 强化你对这个项目的工作流
- 中间件的引入、程序鲁棒性的提升
- 了解 DevOps 理念
- 其他需要做的事情
注意:之后我们所做的一切都是基于这个寒假的项目,我们会将侧重点放在更加现代且核心的要素上。