Coder Social home page Coder Social logo

go-to-byte / dousheng Goto Github PK

View Code? Open in Web Editor NEW
157.0 1.0 33.0 43.67 MB

极简版抖音API —— 获字节跳动第五届青训营一码平川奖(文档编写中,可查看👇)

Home Page: https://go-to-byte.github.io/Docs-DouSheng/

License: MIT License

Makefile 6.86% Go 91.73% Python 1.41%
gin go gorm grpc-go ioc aop consul grpc protobuf golang

dousheng's Introduction

Dousheng

极简版抖音Api —— mini micro server

license language last

主页 🏠 文档 📝 视频 ⏪️
website docs video(待剪)

✨ 特性

  • 🚪适合入门微服务的一个项目
  • 📚内部服务使用GRPC + Consul通信,方便学习
  • 😁使用Gin + Gorm开发,更易上手
  • 🥽利用Makefile工程化管理,方便开发
  • 🐉项目中使用到了IoC、AOP、OOP、IOP、函数式编程等编程**
  • 👀文档清晰、代码思路清晰
  • ❄️利用雪花算法生成ID、MD5做快哈希提升速率、bcrypt做慢哈希提高安全性
  • .....

🍻 使用环境

  • go 1.19
  • mysql 8.0
  • mongodb 6.0
  • consul 1.14.4

📸 本地调试

$ git clone https://github.com/Go-To-Byte/DouSheng.git
$ cd DouSheng

dousheng's People

Contributors

novice2194 avatar smartbest-zhi avatar wwwindrunner avatar yziyan avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

dousheng's Issues

🧾 命名规范

This name specification is difference with other packge:
* NewDefaultGetFavoriteListRequest ==> NewFavoriteListRequest
* GetFavoriteList ==> FavoriteList
* GetFavoriteCountById ==> FavoriteCountById
image
image

🚧实现聊天相关服务

image

实现聊天服务的基础功能,这个可以慢慢做。上次上风好像说她在写这个聊天相关的。可以看看是否感兴趣~

官方给出的参考方案哪种方便、熟悉,就可以。

也可以自己的方式去实现~

🐛 互动模块

  • 二次点赞时,返回的异常消息换一下

285ada6f1ab9b191d0c35cb4ea6bed5

  • 喜欢列表接口,返回的是所有视频
    ec66cd2f1b44cfb43b0dca22011ca8e

🔥实现互动服务

image

  1. 互动方面所需接口的基本功能
  2. 能够组合其他服务
  3. 调优与代码优化
  4. 至于拆两个服务、还是一个服务,都合理,怎么方便怎么来。只要咱们不写

🔐添加内部GRPC服务间调用的中间件

我们现在内部服务调用,是可以直接调用。只需要调用方提供待发现服务的名称、Consul的地址即可

应该做一点限制,比如需要调用方提供一个服务的调用凭证啥的。起码知道是谁来调用我。

可完成MVP版后再做

  1. 看是否需要将用户的ID存入这个认证中,如果不需要,那么ID就只能和Token 公用,那么每次都需要验证Token参数,即使可能没用到。都需要传递下去。

  2. 要不然如果请求是仅在服务间调用的话。会莫名奇妙出现Token传递丢失的情况,也就会丢失 用户的ID

  3. 或者还有种思路,就是再加入服务的网关小组后,将其API组合的功能放在网关小组做。就不要内部服务间耦合了。

🌐实现简易版网关(API Rooter),统一对外暴露的HTTP服务

  1. 之前没有考虑到那个测试APP的缘故。想着如果不是很大的项目,可以暂时不加入网关。因为会引入额外的技术成本,还有就是我们不会有流量

  2. 加入了Api Rooter后, 可以把认证逻辑抽离到 这一层级来,可以减少一些网络调用(虽然GRPC的传输解码效率都高,但是也还是逃不过网络传输)

🐛 社交模块

总体来说是没问题的,主要注意两个地方吧

  1. 参数校验和绑定可以GET一下
  2. 调用成功or失败的提示信息可以 友好一些~
  • 关注接口
  1. 需要加上参数校验 [HTTP和GRPC最好都加上,可以参照已有模块]

  2. 保存失败和成功都可以 换一个更友好的提示消息
    image

  3. 取消关注有问题如图所示
    image

  • 好友列表
  1. 我进行如下调用,内部数组越界,然后 panic 掉了 (不知道是不是我调用方式错了啊)
    image

📈 可优化成批量注入用户信息

从数据库中查出视频列表后,需要为视频注入用户信息。

若是这样循环一条一条注入,此次请求到多少视频,就会产生几次GRPC调用,就会访问几次数据库。(如下图所示)

虽然一次性最多返回30条,但也可以想办法优化成:一次GRPC调用、查询一次用户表。

也就是想办法进行批量查询。

image

💄给GRPC添加中间件

  1. 给一个Recover ,虽然很少 使用 panic,但是调用时如果出现panic,没有recover程序就 over 了

💡 视频互动模块

  • 为Video模块提供获取视频点赞数的RPC接口
  • 为Video模块提供获取评论总数的RPC接口

⏪️完善视频模块

  1. 视频流接口
  2. 用户主页的视频接口

需要统一做一个分页器:pager 。方便复用

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.