b站代码阅读笔记 业务接口篇

栏目: 服务器 · 发布时间: 5年前

内容简介:## b站代码阅读笔记 业务接口篇前几天b站后端代码被强行开源了,让大家有了学习b站代码的机会.写几篇博客记录一下阅读b站代码的经验业务接口目录位于

## b站代码阅读笔记 业务接口篇

前几天b站后端代码被强行开源了,让大家有了学习b站代码的机会.写几篇博客记录一下阅读b站代码的经验

目录结构

业务接口目录位于 /app/interface

子目录分别是

- bbq # 轻视频
- live # 直播
- main # 主站
- openplatform # 开放平台?
- video # 视频

每个子目录下都有分开的子目录,分别负责对应接口.b站使用的是它自己开源的kratos项目,但是好像并完全符合kratos的目录规范

kratos 标准目录格式如

├── CHANGELOG.md           # CHANGELOG
├── CONTRIBUTORS.md        # CONTRIBUTORS
├── README.md              # README
├── api                    # api目录为对外保留的proto文件,及生成的pb.go文件
│   ├── api.proto
│   ├── api.pb.go          # 通过go generate生成的pb.go文件
│   └── generate.go
├── cmd                    # cmd目录为main所在
│   └── main.go            # main.go
├── configs                # configs为配置文件目录
│   ├── application.toml   # 应用的自定义配置文件,可能是一些业务开关如:useABtest = true
│   ├── grpc.toml          # grpc相关配置 
│   ├── http.toml          # http相关配置
│   ├── log.toml           # log相关配置
│   ├── memcache.toml      # memcache相关配置
│   ├── mysql.toml         # mysql相关配置
│   └── redis.toml         # redis相关配置
├── go.mod                 # go.mod
└── internal               # internal为项目内部包,包括以下目录:
    ├── dao                # dao层,用于数据库、cache、MQ、依赖某业务grpc|http等资源访问
    │   └── dao.go
    ├── model              # model层,用于声明业务结构体
    │   └── model.go
    ├── server             # server层,用于初始化grpc和http server
    │   └── http           # http层,用于初始化http server和声明handler
    │       └── http.go
    │   └── grpc           # grpc层,用于初始化grpc server和定义method
    │       └── grpc.go
    └── service            # service层,用于业务逻辑处理,且为方便http和grpc共用方法,建议入参和出参保持grpc风格,且使用pb文件生成代码
        └── service.go

而实际中部分目录是

- cmd # 启动服务的命令行文件和配置文件
- conf # 处理配置的目录
- dao  
- http # 定义外部接口和处理一些参数验证
   - http.go # 主文件
- model 
- service

应该是旧代码 未跟随框架更新.

接口定义

http.go文件有以下函数

// Init init http sever instance.
func Init(c *conf.Config) {}

// initService init services.
func initService(c *conf.Config) {}

// 定义路由  函数名不固定 好像命名全看心情
func outerRouter(e *bm.Engine) {}
func initRouter(e *bm.Engine) {}

kratos基于gin二开,定义路由风格也差不多

# 定义主机地址/x/internal 路由组
uploadInternal := e.Group("/x/internal")
# 定义post方法的路由, 参数分别是路径,可能不止一个的中间件,处理函数. 由于是使用了路由组 这里的实际路径是/x/internal/upload 根据
uploadInternal.POST("/upload", verifySvr.Verify, internalUpload)

主要的验证中间件含义如下

# verifySvr是变量名 类型是verify.Verify
verifySvr.Verify # 需要appkey签名

# 同上 类型是auth.Auth 需要登陆
authSvr.UserMobile # 需要access_key
authSvr.UserWeb # 需要cookies
authSvr.User # 允许UserMobile or UserWeb

# 不需要登陆
authSvr.GuestWeb
authSvr.GuestMobile
authSvr.Guest

参数获取

主要参数获取方式

# 获取参数
c.Request.Form.Get("mobi_app")

# 获取header
buvid = c.Request.Header.Get("Buvid")
# 文件
c.Request.FormFile("file")

通过这些就可以在不了解内部逻辑的情况下,快速获取b站外部api接口定义


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

联盟

联盟

里德•霍夫曼、本•卡斯诺查、克里斯•叶 / 路蒙佳 / 中信出版社 / 2015-2-5 / 39.00元

在充满变化的世界,联盟潜在的合伙人 将不确定的行业转变为可掌控的职业生涯 与世界紧密连接,开创精彩的事业与未来 终生效忠于一家公司已经成为历史,我们正在经历的自由雇佣制——将员工看作自由人——无法建立创新所需的高度信任与合作的关系。 互联网时代,企业如何用全新的人才策略定义员工的忠诚?未来职业成功的秘诀是什么? 《联盟》提供了一种使雇主与员工之间从商业交易转变为互惠关......一起来看看 《联盟》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码