在 GoLang 中使用通用原型请求数据的 GRPC 服务
GRPC Service with Generic proto request data in GoLang
我有 3 个原型如下:
1 - record.proto
message Record {
int64 primaryKey = 1;
int64 createdAt = 2;
int64 updatedAt = 3;
}
2 - user.proto
import "record.proto";
message User {
Record record = 31;
string name = 32;
string email = 33;
string password = 34;
}
3 - permissions.proto
import "record.proto";
message Permissions{
Record record = 31;
string permission1= 32;
string permission2= 33;
}
问题1:
有没有一种方法可以在 golang 中实现一个 grpc 服务器和客户端,它专门将 Record 作为请求,但可以接受后来的两种类型。即用户和权限。
类似于:
service DatabaseService {
rpc Create(Record) returns (Response);
}
这样我就可以发送 grpc 客户端请求,如下所示:
Create(User) returns (Response);
Create(Permissions) returns (Response);
您可以使用 oneof
,它允许客户端发送 User
或 Permissions
。
参考 https://developers.google.com/protocol-buffers/docs/proto3#oneof
message Request {
oneof request {
User user = 1;
Permissions permissions = 2;
}
}
因此客户端可以在请求中填写其中的任何一个。
service DatabaseService {
rpc Create(Request) returns (Response);
}
我有 3 个原型如下:
1 - record.proto
message Record {
int64 primaryKey = 1;
int64 createdAt = 2;
int64 updatedAt = 3;
}
2 - user.proto
import "record.proto";
message User {
Record record = 31;
string name = 32;
string email = 33;
string password = 34;
}
3 - permissions.proto
import "record.proto";
message Permissions{
Record record = 31;
string permission1= 32;
string permission2= 33;
}
问题1: 有没有一种方法可以在 golang 中实现一个 grpc 服务器和客户端,它专门将 Record 作为请求,但可以接受后来的两种类型。即用户和权限。 类似于:
service DatabaseService {
rpc Create(Record) returns (Response);
}
这样我就可以发送 grpc 客户端请求,如下所示:
Create(User) returns (Response);
Create(Permissions) returns (Response);
您可以使用 oneof
,它允许客户端发送 User
或 Permissions
。
参考 https://developers.google.com/protocol-buffers/docs/proto3#oneof
message Request {
oneof request {
User user = 1;
Permissions permissions = 2;
}
}
因此客户端可以在请求中填写其中的任何一个。
service DatabaseService {
rpc Create(Request) returns (Response);
}