项目总结(持续更新)
微服务项目总结
python 编写服务层 + grpc + proto + go应用层 + gin(web框架) 完成一个电商项目
服务层总结 (python)
实现步骤梳理
- Models 数据库模型定义、与数据表生成
- proto 文件定义、生成proto文件
- 根据proto 编写服务层业务
- 编写业务 需要操作DB,所以 要将proto中的message和model类数据相互转换
- 保存数据时,将request请求过来的数据信息 赋值给 模型类对象
- 返回数据时,模型类对象 转换为 proto定义的数据类型
- 启动grpc 服务,供应用层连接(开启服务 三步 类似把大象放进冰箱)
- 声明得到一个server
- 将服务注册到server
- 启动服务(host + ip)
使用到哪些组件,解决了什么问题?
-
连接DB 使用 peewee 通过ORM 操作
- 创建数据库连接池
- ORM 模型转换
-
根据proto 编写业务 使用gprc
- gRPC 是一个高性能、开源和通用的 RPC 框架,面向移动和 HTTP/2 设计,跨语言
- rpc 中 三个核心: call_id映射 、传输协议 、 网络传输
- call_id映射 : 调用远程方法时,怎么能找到它?服务端和客户端通信,都得维护一张映射表,调用方法根据找到call_id 去调用。这个call_id在所有进程都是唯一的。
- 传输协议(序列化与反序列化): protobuf 、json 、xml 都是传输协议,这里使用protobuf,谷歌开源的轻量级传输协议,比json效率高
- 网络传输:客户端和服务端 要通过网络连接,tcp 还是http都可以,grpc 直接使用了HTTP2
-
其他非核心组件
记录日志:loguru
密码加密:passlib.pbkdf2_sha256 md5盐值
应用层总结 (go)
实现步骤梳理
- 要给前端开放 http/restful 风格的接口
- 要验证前端传递过来的数据信息,也可以对验证通过后的数据处理
- 要连接服务端拿到数据信息作处理
- 服务端返回的数据是proto 格式,返回给前端需要json格式数据,要数据转换
- 开发环境和生产环境要分离,需要使用配置文件
使用到哪些组件,解决了什么问题?
-
接收请求和返回数据 - 使用到web框架gin(开启一个服务本质也是三步走)
- 定义Router 使用gin.Default() 将得到一个 *gin.Engine
- 注册路由信息, 路由核心也分三部分:
- 路由:即符合restful风格的接口地址
- 组件:JWTAuth 认证, Cors组件等..
- func:路由对应的数据方法
结合python中Django理解,web框架大同小异,路由分发器会执行对应视图
-
前端数据验证,即表单验证
-
验证数据需要载体,对应go中的struct,根据struct中的tag验证
-
使用 validator ,可以利用tag做限制,也可自定义验证器
-
自定义验证器之后需要注册到 binding.Validator.Engine()
这里对比DRF 中的Serializer 序列化器,自定义字段,也可使用ModelSerializer 继承model字段,控制字段的传入(只写) 与 输出(只读) ,也可以自定义验证规则,多字段联合验证等
-
-
连接服务端
-
grpc 客户端建立连接
-
新建一个连接 Dial(host + ip) *defer conn.Close()
defer 对比python中with 语句,有连接需要关闭,文件操作,DB操作等...
-
创建一个客户端 proto.NewUserClient 得到一个 UserClient
func NewUserClient(cc grpc.ClientConnInterface) UserClient{}
-
向服务层发请求
1.要调哪个方法 GetUserList
2.request 请求服务端的数据
rsp, err := client.GetUserList(context.Background(), &proto.PageInfo{})
-
得到rsp,结果有两种 成功 或 失败
- fail : 将grpc定义的code码转换为http状态码,返回前端需要HTTP状态码和错误描述信息 - pass : 要定义返回数据的载体即struct,rsp中proto格式数据赋值 给结构体,然后返回给前端
-
-
-
其他组件:
go.uber.org/zap v1.19.1 //优步开源的高性能日志记录框架,是线程安全的 github.com/spf13/viper v1.9.0 //通过配置文件解决环境隔离问题,可以实时监控配置文件修改 github.com/go-redis/redis/v8 v8.11.4 //保存短信验证码 github.com/dgrijalva/jwt-go v3.2.0+incompatible //验证权限登录 github.com/mojocn/base64Captcha v1.3.5 //图片验证码
持续更新中...
本文来自博客园,作者:CV-coding,转载请注明原文链接:https://www.cnblogs.com/CV-coding/p/15545604.html