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接口定义


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

查看所有标签

猜你喜欢:

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

Java语言程序设计

Java语言程序设计

(美) Y. Daniel Liang / 李娜 / 机械工业出版社 / 2011-6 / 75.00元

本书是Java语言的经典教材,多年来畅销不衰。本书全面整合了Java 6的特性,采用“基础优先,问题驱动”的教学方式,循序渐进地介绍了程序设计基础、解决问题的方法、面向对象程序设计、图形用户界面设计、异常处理、I/O和递归等内容。此外,本书还全面且深入地覆盖了一些高级主题,包括算法和数据结构、多线程、网络、国际化、高级GUI等内容。 本书中文版由《Java语言程序设计:基础篇》和《Java语......一起来看看 《Java语言程序设计》 这本书的介绍吧!

SHA 加密
SHA 加密

SHA 加密工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具