该系列源码已开源:
1. 概述
第三章8userproductcategorycartordersorder_recordorder_addresspay_info555第四章API定义5APIRPC5RPCAPI数据依赖如果以上设计构想不是很清楚的,可通过如下传送门查看该系列其他文章:
2. RPC定义
RPCAPIRPCRPCrpc.protoRPC用户服务
主要功能:用户登录、用户注册、用户信息、...
account.protosyntax = "proto3";
package account;
option go_package = "./account";
message RegisterReq{
string UserName = 1;
string PassWord = 2;
string UserNick = 3;
string UserFace = 4;
int64 UserSex = 5;
string UserEmail = 6;
}
message LoginReq{
string UserName = 1;
string PassWord = 2;
}
message CommonResply{
int64 Code = 1;
string Message = 2;
string Data = 3;
}
message UserInfoReq{
string UserIdentity = 1;
}
service user{
rpc Register(RegisterReq) returns(CommonResply);
rpc Login(LoginReq) returns(CommonResply);
rpc UserInfo(UserInfoReq) returns (CommonResply);
}
- 生成命令如下:
goctl rpc protoc account.proto --go_out=./types --go-grpc_out=./types --zrpc_out=. -style go-zero
- 生成后的目录结构:
├── Dockerfile
├── account.go
├── account.proto // proto描述文件
├── etc
│ └── account.yaml // 配置文件
├── internal
│ ├── config
│ │ └── config.go // 配置声明type
│ ├── logic // 业务逻辑
│ │ ├── login-logic.go
│ │ ├── register-logic.go
│ │ └── user-info-logic.go
│ ├── server
│ │ └── user-server.go
│ └── svc // logic所依赖的资源池
│ └── service-context.go
├── model // 数据库表模型生成
│ ├── user_model.go
│ ├── user_model_gen.go
│ ├── user_receive_address_model.go
│ ├── user_receive_address_model_gen.go
│ └── vars.go
├── types // request、response的struct,根据api自动生成,不建议编辑
│ └── account
│ ├── account.pb.go
│ └── account_grpc.pb.go
└── user // main函数入口
└── user.go
首页服务
主要功能:首页banner图、人气推荐、商品推荐列表、...
home.protosyntax = "proto3";
package home;
option go_package = "./home";
message BannerReq{}
message RecommendReq{}
message RankingListReq{}
message CommonResply{
int64 Code = 1;
string Message = 2;
string Data = 3;
}
service home{
rpc Banner(BannerReq) returns(CommonResply);
rpc Recommend(RecommendReq) returns(CommonResply);
rpc RankingList(RankingListReq) returns(CommonResply);
}
- 生成命令如下:
goctl rpc protoc home.proto --go_out=./types --go-grpc_out=./types --zrpc_out=. -style go-zero
- 生成后的目录结构:
├── etc
│ └── home.yaml
├── home.go
├── home.proto
├── homeclient
│ └── home.go
├── internal
│ ├── config
│ │ └── config.go
│ ├── logic
│ │ ├── banner-logic.go
│ │ ├── ranking-list-logic.go
│ │ └── recommend-logic.go
│ ├── server
│ │ └── home-server.go
│ └── svc
│ └── service-context.go
├── model
│ ├── banner.sql
│ ├── banner_model.go
│ ├── banner_model_gen.go
│ └── vars.go
└── types
└── home
├── home.pb.go
└── home_grpc.pb.go
产品服务
主要功能:产品列表、产品详情、分类列表、...
product.protosyntax = "proto3";
package product;
option go_package = "./product";
message GetProductsReq {
int64 Page = 1;
int64 PageSize = 2;
string Search = 3;
}
message ProductReq {
string productIds = 1;
}
message GetCateoryReq {
int64 Pid = 1;
}
message CommonResply{
int64 Code = 1;
string Message = 2;
string Data = 3;
}
service product{
rpc Products (GetProductsReq) returns (CommonResply);
rpc Product (ProductReq) returns (CommonResply);
rpc Category (GetCateoryReq) returns (CommonResply);
}
- 生成命令如下:
goctl rpc protoc product.proto --go_out=./types --go-grpc_out=./types --zrpc_out=. -style go-zero
- 生成后的目录结构:
├── etc
│ └── product.yaml
├── internal
│ ├── config
│ │ └── config.go
│ ├── logic
│ │ ├── category-logic.go
│ │ ├── product-logic.go
│ │ └── products-logic.go
│ ├── server
│ │ └── product-server.go
│ └── svc
│ └── service-context.go
├── product.go
├── product.proto
├── productclient
│ └── product.go
└── types
└── product
├── product.pb.go
└── product_grpc.pb.go
购物车服务支付服务订单服务3. 结束语
本篇文章介绍说明了:
RPCrpc.proto另外,如果你感兴趣,非常欢迎你加入,我们一起来完成这个项目,为社区献出自己的一份力。
希望本篇文章对你有所帮助,谢谢。