这是我参与「第五届青训营」笔记创作活动的第1天
大项目基础架构图
今天根据组内大项目的规划,进行了api部分的搭建工作。计划首先完成api部分和user部分,将整个系统跑通,后续再增加其他功能rpc模块。
一、完成api.thrift的第一版:(仅支持用户注册和用户登录功能)
namespace go api
struct User {
1: i64 user_id
2: string username
}
struct RegisterUserRequest {
1: string username (api.form="username", api.vd="len($) > 0")
2: string password (api.form="password", api.vd="len($) > 0")
}
struct RegisterUserResponse {
1: i32 status_code
2: string status_msg
3: i64 user_id
4: string token
}
struct LoginUserRequest {
1: string username (api.form="username", api.vd="len($) > 0")
2: string password (api.form="password", api.vd="len($) > 0")
}
struct LoginUserResponse {
1: i32 status_code
2: string status_msg
3: i64 user_id
4: string token
}
service ApiService {
RegisterUserResponse RegisterUser(1: RegisterUserRequest req) (api.post="/douyin/user/register")
LoginUserResponse LoginUser(1: LoginUserRequest req) (api.post="/douyin/user/login")
}
- 将api.thrift放在项目文件夹api的idl文件夹下,而后运行命令
hz new -idl idl/api.thrift -mod api - 修改
biz/model/api/api.go文件中的package api\biz\model\api为package api - 执行
go mod tidy命令,等待下载 - 执行
go build命令,生成api.exe,运行 - 浏览器中输入
127.0.0.1:8888/ping,得到如下结果,脚手架代码生成工作完成
二、参考官方提供的easy_note项目,进行工程文件夹的构建
参考链接:biz-demo/easy_note at main · cloudwego/biz-demo (github.com)
api部分文件夹初步构建如下:(忽略报错)
- consts.go存储项目需要用到的一些全局常量,便于修改
- errno.go负责生成项目错误代码和错误信息
- handler中的文件处理post请求并响应
- model中文件代码由thriftgo根据所写的api.thrift生成,不予修改,但需调用
- mw中存储中间件代码,暂时只使用jwt.go实现token认证
- router中代码是由Hertz根据api.thrift生成的路由信息,暂时不予修改
- rpc中user.go代码向etcd发起resolver请求,并处理返回信息