这是我参与「第五届青训营 」伴学笔记创作活动的第5天,今天主要学习了开发三件套,ORM框架GORM的基本操作以及常见的使用错误和最佳实践;RPC框架Kitex;HTTP框架Hertz。最后的项目结合后两个框架搭建了一个笔记demo。
三件套
GORM:ORM框架
操作
删除
- 硬删:Delete
- 软删:gorm.DeletedAt,查询会自动去除软删,可用Unscoped查询到被软删数据
约定
- 使用ID字段作为字段
- 没有TableName,默认用结构体蛇形负数为表名称
- 字段的蛇形作为列名
常见坑总结
- update,delete,create,first,find 都是finish api,会直接执行语句,不要把where等操作写在后边
- First查询不到会返回Error,尽量用Find查不到是空数组
- struct查询/更新只会查询/更新非零值字段
- 更新零值,用map或者select
- 事务1:开启tx := db.begin() 链接固化, 后续操作都用tx.xxx
- 事务2:推荐使用用db.Transaction防止自己忘记rollback
- Hook有默认事务
Kitex:RPC框架
IDL
接口描述语言(Interface description language,缩写IDL),是用来描述软件组件介面的一种计算机语言。IDL通过一种独立于编程语言的方式来描述接口,使得在不同平台上运行的对象和用不同语言编写的程序可以相互通信交流;比如,一个组件用C++写成,另一个组件用Java写成。 IDL通常用于远程调用软件。
进行RPC,需要通过IDL定义服务和接口
kitex -moudle example -service example xxx.thrift 自动生成代码
项目
运行
提前装下docker,docker镜像ubuntu参考,docker镜像配置参考
注意:最新版本的docker构建命令是sudo docker compose up,参考docker-compose-cant-execute,漫长的等待。。。先睡了。
总结
比较复杂,项目用RPC有难度,但值得尝试。
大项目思考:怎么理解token
看大项目api文档里,几乎大部分api都有这个token字段,刚开始还以为这个token几乎等同于user_id了。 后边查了一些资料,大致总结下:
- 什么是token 参考
Token是首次登陆时由服务器下发,作为客户端进行请求的一个令牌,当交互时用于身份验证的一种验证机制,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。
-
好处:
保证安全性的前提下,减少了服务端查数据库压力。(VS session) -
常用的库JWT实践 参考
用密钥加密发送一串字符token到客户端,客户端下次带着这个加过密的字段来访问资源;只有加密的服务器可以验证token,从而实现安全认证。鉴权失败401 Unauthorized。