Skip to content

Latest commit

 

History

History
112 lines (80 loc) · 5.82 KB

4-大作品.md

File metadata and controls

112 lines (80 loc) · 5.82 KB

Golang Lab4

在本Lab中,你拥有以下三个选择:

  1. 参加 2024 年服务外包创新创业大赛(此项需求需同组长商量)
  2. 完成MIT 6.824 分布式系统 (2024 Spring)的 lab2
  3. 完成以下内容

目的

  • 掌握HTTP协议和Web工作原理
  • 掌握现代 HTTP 框架开发流程
  • 掌握数据库的增删改查(CRUD)及基础的数据库表设计
  • 入门简单的缓存引入和使用
  • 入门简单的项目设计模式

背景

金三银四来了!FanOne 正在准备面试,由于过于卷,于是想放松一下看一下番剧,可惜她又没有大会员,FanOne现在很苦恼

任务清单

请你写一个视频网站(写 API 文档接口即可),让LWGG能在没有大会员的条件下开心的追番吧!

请遵照以下接口文档完成功能

https://doc.west2.online/

你不必完成以上的全部功能,以下完成本次作业的最低要求(共计 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 上)
  • 请求和返回结构必须遵循接口文档

Bonus

  • 实现全部接口的全部功能
  • 对点赞操作引入 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 理念
  • 其他需要做的事情

注意:之后我们所做的一切都是基于这个寒假的项目,我们会将侧重点放在更加现代且核心的要素上。

参考