应用层接口
应用层是以两个子项目来构成的。一个是接口层,一个是实现层。
这样是因为,接口层是提供给rest等层依赖的,而实现层则并不需要。这样rest层只依赖应用层的接口
在本项目中,我们的架构是使用dubbo + protobuf来实现的。
这意味着在应用层的接口中,我们是使用protobuf来定义接口
1. 编码指引
1.1 前期自我准备
- 我们不会在规范中详细的描述如何使用protobuf,关于protobuf的具体请阅读官网的文档及教程先
- 请在IDEA中安装protobuf插件,这对IDE中编写protobuf文件非常有帮助
1.1 在api层的src/main/protobuf目录中定义protobuf
比如,我们为User这个领域类定义一个接口API
syntax = "proto3";
import "google/protobuf/wrappers.proto";
option java_multiple_files = true;
option java_package = "com.foreverht.lowcode.security.api";
option java_outer_classname = "UserApplicationProto";
package com.foreverht.lowcode.security.api;
service UserApplication {
/**
* 创建一个本地用户
*/
rpc CreateLocalUser(UserDto) returns (UserDto);
/**
* 根据用户ID查询一个用户
*/
rpc QueryUserByUserId(google.protobuf.StringValue) returns (UserDto);
/**
* 分页查询用户
*/
rpc PageQueryUser(PageQueryDto) returns (PageUserDto);
/**
* 启用一个用户
*/
rpc EnableUser(UserDto) returns (google.protobuf.BoolValue);
/**
* 禁用一个用户
*/
rpc DisableUser(UserDto) returns (google.protobuf.BoolValue);
}
message PageQueryDto{
int32 page = 1;
int32 page_size = 2;
}
message PageUserDto{
repeated UserDto users = 1;
int32 page = 2;
int32 page_size = 3;
int64 total = 4;
}
message UserDto {
int64 id = 1;
string user_id = 2;
string password = 3;
string encode_password = 4;
string name = 5;
int64 create_time = 6;
string phone = 7;
string email = 8;
bool disabled = 9;
}
1.3 编译生成源文件
在对应api的目录下,执行以下命令
gradle clean build
这样就会根据你定义的protobuf来生成代码。代码目录的build/generated/source/proto/main目录下
你不需要将其移到你的main/java中,build/generated这个目录会被识别会源码目录
2. 其它
在编写protobuf的过程中,如果IDEA给出了警告或提示,请详细阅读它,并根据警告或提示修正你的定义