前面《kratos微服务实战(四)kratos项目之helloword》我们成功的运行了hello Word项目,既然是项目,那么很多接口其实就需要我们来进行编写,所以这里是user-server,那么我们来创建一个account的接口,再编写一个login接口。具体的操作如下:
一、定义login接口
前面介绍了,所有的接口定义是在api,目录下执行的,所以这里我们在api层进行如下操作:
1、创建account文件夹的v1版本,并在下面创建一个account.proto文件
2、在account.proto文件中填写如下的内容:
syntax = "proto3"; package account.v1; //引入google。api.http,自动生成接口 import "google/api/annotations.proto"; //如果当前proto是自己写的,那么记得把这个包修改为对应的包 option go_package = "user-center/api/account/v1;v1"; service Account { //定义一个登录接口 rpc Login (LoginRequest) returns (LoginResponse) { option (google.api.http) = { post: "user-center/users/login", body: "*", }; } } //定义登录请求 message LoginRequest { string username = 1; string password = 2; } //定义登录后返回的对象信息 message LoginResponse { int64 code = 1; string msg = 2; string token = 3; }
3、使用kratos命令把上面的account.proto的客户端给编译出来
kratos proto client api/account/v1/account.proto
执行完成之后,可以看到在api/account/v1文件夹下生成了很多pb文件
到此为止,我们的接口定义就完成了。
二、生成service代码
接下里我们继续编译account的service代码,还是使用kratos命令,完整命令如下:
kratos proto server api/account/v1/account.proto -t internal/service
执行完成之后,可以在internal/service目录下看到生成了一个account.go的文件
然后我们打开internal/service/account.go文件,可以看到自动的实现了前面的login方法。
这里我们把它改写下,即我们自定义下返回的数据,(这里暂时不接入数据库,后续再加),这里改写的示例如下:
func (s *AccountService) Login(ctx context.Context, req *pb.LoginRequest) (*pb.LoginResponse, error) { return &pb.LoginResponse{Code: 200, Msg: "请求成功", Token: "123456"}, nil }
示例图如下:
三、注册service
这里我们把service给编写好了之后,就需要去注册这里的service,注册也比较简单,我们看刚才生成的account.go文件,里面自动生成的有AccountService的struct,如下图:
我们把它注册到internal/service/service.go文件中即可,打开internal/service/service.go文件,在newSet后面添加上NewAccountService即可,示例如下:
var ProviderSet = wire.NewSet(NewGreeterService, NewAccountService)
四、注册http和grpc
接下来我们就把account这个proto的接口注册到http和grpc上,供外部可以访问,步骤如下:
1、打开internal/server/http.go文件
2、在import里面添加上account.proto所在包的路径,起名为v2,示例如下:
v2 "user-center/api/account/v1"
3、然后修改NewHTTPServer的入参,添加一个account的入参,示例如下:
func NewHTTPServer(c *conf.Server, greeter *service.GreeterService, logger log.Logger, account *service.AccountService) *http.Server { 。。。。 。。。。 }
4、在NewHTTPServer方法体里面注册刚才的service
v2.RegisterAccountHTTPServer(srv, account)
5、打开internal/server/grpc.go文件
6、在import里面添加上account.proto所在包的路径,起名为v2,示例如下:
v2 "user-center/api/account/v1"
7、然后修改NewGRPCServer的入参,添加一个account的入参,示例如下:
func NewGRPCServer(c *conf.Server, greeter *service.GreeterService, logger log.Logger, account *service.AccountService) *grpc.Server { 。。。。 。。。。 }
8、在NewGRPCServer方法体里面注册刚才的service
v2.RegisterAccountServer(srv, account)
五、自动注入
前面对应的配置都已经设置好了,接下来需要使用wire工具进行自动注入了,kratos生成的项目在cmd/user-center目录下有一个wire_gen.go文件,这是执行wire自动注入生成的文件
这里进入到golan的终端,执行如下命令
#进入到cmd/user-center目录 cd cmd/user-center #执行自动注入 wire
然后打开cmd/user-center/wire_gen.go文件,就可以看到刚才添加的accountservice被自动注入进来了
六、启动项目测试
接下来我们启动项目进行测试
kratos run
然后请求下刚才的登录接口
可以看到成功的请求到了刚才编写的login接口,返回的数据是我们刚才在service里面写死的,当前接口完全没问题。
以上就是我们为kratos生成的微服务自定义接口的案例。最后按照惯例,附上本案例的源码,登录后即可下载。
还没有评论,来说两句吧...