tiktok_e-commence项目Api文档解析为Java语言。
认证服务为例子
syntax="proto3";
package auth;
option go_package="/auth";
service AuthService {
rpc DeliverTokenByRPC(DeliverTokenReq) returns (DeliveryResp) {}
rpc VerifyTokenByRPC(VerifyTokenReq) returns (VerifyResp) {}
}
message DeliverTokenReq {
int32 user_id= 0;
}
message VerifyTokenReq {
string token = "emtp";
}
message DeliveryResp {
string token = "emtp";
}
message VerifyResp {
bool res = false;
}
逐条分析
-
package auth;
Java项目中可以看作是一个单独功能,auth是认证功能。创建的时候把这些包含的功能放在一个文件夹中。比如 微服务可以单独创建一个maven项目 -
option go_package="/auth";
统一的请求路径为"/auth",这个最好配置在服务器中。我配置ymal文件: server: servlet: context-path: /auth port: 7347 -
ervice AuthService {}:看作一个Api文件,此接口文件有两个api接口
service AuthService { rpc DeliverTokenByRPC(DeliverTokenReq) returns (DeliveryResp) {} rpc VerifyTokenByRPC(VerifyTokenReq) returns (VerifyResp) {}}
示例: 第一个api接口,rpc是远程调用的缩写(别理解错为返回类型)DeliverTokenByRPC是方法名,DeliverTokenReq请求体,DeliveryResp返回体。 第二个api接口,VerifyTokenByRPC是方法名,VerifyTokenReq请求体,VerifyResp返回体。
4.message DeliverTokenReq { int32 user_id= 0; }
message这个也不是返回类型,DeliverTokenReq,这个可以看作是Dto类,也就是要接收到前端传送的
int32 user_id= 0;的值。
5.message VerifyTokenReq { string token = "emtp"; }
如上述同理,此处有一个特别的string token = "emtp";此字段里面的"emtp"意思是请求一个令牌。至于是什么令牌,自己随便定,我是传的jwt令牌其格式eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9. eyJ1c2VyX2lkIjoxMjMsInVzZXJuYW1lIjoiYWRtaW4iLCJpYXQiOjE2OTY3MzQ1NjAsImV4cCI6MTY5NjczODExMH0.
7KsDZGQaFzL8h3vG1b5yGt6zP0rLQ8o8q3x2m1n0p9A
6.message DeliveryResp { string token = "emtp"; }
如上述同理,此处有一个特别的string token = "emtp";此字段里面的"emtp"意思是请求一个令牌。只是返回用的。
7.message VerifyResp { bool res = false; }
如上述同理,只是返回用的。
此表实现逻辑逻辑
- 创建名为auth的认证授权服务
- 统一请求入口"\auth"
- 创建controller,表里面没写,但是这个是实现用户服务接口的操作(先做完用户服务再说的),看下面的图 在用户登录后,去实现此功能服务。
4.当用户登录后,需要请求rpc DeliverTokenByRPC(DeliverTokenReq) returns (DeliveryResp) {}这个api,(DeliverTokenReq请求参数为用户id,这个是需要判定user表的id字段的。返回一个DeliveryResp令牌字符串。
5 . 拿到身份令牌后去校验令牌, rpc VerifyTokenByRPC(VerifyTokenReq) returns (VerifyResp) {}这个api就是负责校验的,VerifyTokenReq获取到上述生成令牌DeliveryResp,校验成功后返回一个VerifyResp,结果为布尔值。