💌 这是我参与「第五届青训营」伴学笔记创作活动的第 6 天。
🧡 本堂课重点内容
- 实战项目介绍
- 项目功能介绍
- 关键代码讲解
🧡 实战项目
项目介绍
💌 笔记项目是一个使用 Hertz、Kitex、Gorm 搭建出来的具备一定业务逻辑的后端 API 项目。主要分为三个服务:
技术栈
项目源码
- 优化版(统一 RPC 服务协议为 Thrift)
github.com/cloudwego/b… - 普通版
github.com/cloudwego/k…
项目功能介绍
💌 该项目的三个服务分别包含如下功能:
关键代码讲解
- ProtoBuf(大项目中的接口协议)
// user.proto
syntax = "proto3";
package user;
option go_package = "userdemo";
message BaseResp {
int64 status_code = 1;
string status_message = 2;
int64 service_time = 3;
}
// User 结构体
message User {
int64 user_id = 1;
string user_name = 2;
string avatar = 3;
}
// 创建用户请求
message CreateUserRequest {
string user_name = 1;
string password = 2;
}
// 创建用户响应
message CreateUserResponse {
BaseResp base_resp = 1;
}
// 批量获取
message MGetUserRequest {
repeated int64 user_ids = 1;
}
message MGetUserResponse {
repeated User users = 1;
BaseResp base_resp = 2;
}
// 查询用户信息
message CheckUserRequest{
string user_name = 1;
string password = 2;
}
message CheckUserResponse{
int64 user_id = 1;
BaseResp base_resp = 2;
}
// 用户 RPC 服务
service UserService {
rpc CreateUser (CreateUserRequest) returns (CreateUserResponse) {}
rpc MGetUser (MGetUserRequest) returns (MGetUserResponse) {}
rpc CheckUser (CheckUserRequest) returns (CheckUserResponse) {}
}
- Thrift
// note.thrift
namespace go demonote
struct BaseResp {
1: i64 status_code
2: string status_message
3: i64 service_time
}
// Note 结构体
struct Note {
1: i64 note_id
2: i64 user_id
3: string username
4: string user_avatar
5: string title
6: string content
7: i64 create_time
}
// 创建笔记请求
struct CreateNoteRequest {
1: string title (vt.min_size = "1")
2: string content (vt.min_size = "1")
3: i64 user_id (vt.gt = "0")
}
// 创建笔记响应
struct CreateNoteResponse {
1: BaseResp base_resp
}
// 删除
struct DeleteNoteRequest {
1: i64 note_id (vt.gt = "0")
2: i64 user_id
}
struct DeleteNoteResponse {
1: BaseResp base_resp
}
// 更新
struct UpdateNoteRequest {
1: i64 note_id (vt.gt = "0")
2: i64 user_id
3: optional string title
4: optional string content
}
struct UpdateNoteResponse {
1: BaseResp base_resp
}
// 查询
struct QueryNoteRequest {
1: i64 user_id (vt.gt = "0")
2: optional string search_key
3: i64 offset (vt.ge = "0")
4: i64 limit (vt.ge = "0")
}
struct QueryNoteResponse {
1: list<Note> notes
2: i64 total
3: BaseResp base_resp
}
// 批量获取
struct MGetNoteRequest {
1: list<i64> note_ids (vt.min_size = "1")
}
struct MGetNoteResponse {
1: list<Note> notes
2: BaseResp base_resp
}
// 笔记 RPC 服务
service NoteService {
CreateNoteResponse CreateNote(1: CreateNoteRequest req)
DeleteNoteResponse DeleteNote(1: DeleteNoteRequest req)
UpdateNoteResponse UpdateNote(1: UpdateNoteRequest req)
QueryNoteResponse QueryNote(1: QueryNoteRequest req)
MGetNoteResponse MGetNote(1: MGetNoteRequest req)
}
Hertz
github.com/cloudwego/k…
Kitex Client
github.com/cloudwego/k…
Kitex Server
github.com/cloudwego/k…
Gorm
github.com/cloudwego/k…
课后总结
💌 本节课通过一个笔记项目了解 Gorm/Kitex/Hertz 是什么,熟悉 Gorm/Kitex/Hertz 的基础用法,通过实战案例分析将三个框架的使用串联了起来。