Skip to main content

应用层接口

应用层是以两个子项目来构成的。一个是接口层,一个是实现层。

这样是因为,接口层是提供给rest等层依赖的,而实现层则并不需要。这样rest层只依赖应用层的接口

在本项目中,我们的架构是使用dubbo + protobuf来实现的。

这意味着在应用层的接口中,我们是使用protobuf来定义接口

1. 编码指引

1.1 前期自我准备

  1. 我们不会在规范中详细的描述如何使用protobuf,关于protobuf的具体请阅读官网的文档及教程先
  2. 请在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给出了警告或提示,请详细阅读它,并根据警告或提示修正你的定义