type (
LoginRequest {
Username string `json:"username"`
Password string `json:"password"`
}
RegistRequest {
Username string `json:"username"`
Password string `json:"password"`
}
RegistResponse {
UserId uint `json:"userId"`
Err string `json:"err"`
}
)
@server (
prefix: /api/users
)
service users {
@handler login
post /login (LoginRequest) returns (string)
@handler register
post /regist (RegistRequest) returns (RegistResponse)
}
type (
UserInfoRequest {
Id uint `json:"id"`
}
UserInfoResponse {
Username string `json:"username"`
}
)
@server (
prefix: /api/users
jwt: Auth //开启jwt认证
)
service users {
@handler userInfo
get /info (UserInfoRequest) returns (UserInfoResponse)
}
首先是api文档,然后通过命令
//goctl api go -api user.api -dir .
去生成对应的go项目
在etc/users.yaml中添加myslq的链接信息和jwt
在config/config.go中添加相应的配置内容
在svc中配置数据库的初始化和Context信息
最后就是logic/loginlogic.go中对于具体服务的一个处理
在login中进行token的生成,其他的响应根据业务写出相应的代码
然后是rpc的引入,首先是写一个和前面的api比较相似的proto
syntax = "proto3";
package user;
option go_package="./user";
message LoginRequest{
string Username=1;
string Password=2;
}
message LoginResponse{
uint32 UserId =1;
string Token=2;
}
message RegisterRequest{
string username=1;
string password=2;
}
message RegisterResponse{
uint32 user_id=1;
string err=2;
}
service user{
rpc UserLogin(LoginRequest) returns(LoginResponse);
rpc UserRegister(RegisterRequest)returns(RegisterResponse);
}
//goctl rpc protoc user.proto --go_out=./types --go-grpc_out=./types --zrpc_out=.
然后通过命令去生成对应的go文件,同时将所有的处理业务从api转移到proto中,
最后api通过etcd获取rpc所对应的服务,最终处理请求