【发布时间】:2021-04-10 09:47:31
【问题描述】:
假设我有一个 grpc 服务,并且有一个 API 可以像这样创建新用户:
service UserService{
rpc CreateUser(CreateUserRequest) returns (CreateUserResponse);
}
message User {
string userId = 1;
string firstName = 2;
string lastName = 3;
string password = 4;
}
message CreateUserRequest {
user User = 1;
}
message CreateUserResponse {
user User = 1;
}
该服务将用户数据保存到 PostgresDb 中的 users_table 中,如下所示:
user1 := NewUser() // instantiating the User object as defined in the proto file.
// user2 := NewMyUser() // instantiating the MyUser object as defined separately in the service.
result := s.db.Table(UsersTable).Create(user1)
另外,我正在使用 proto buffer 根据上面的 api proto 文件生成服务器和客户端代码。 我的问题是:实例化用户对象时,用户应该是原型定义中定义的生成的用户结构吗?还是应该像这样在 postgresDb 专用服务中定义另一个 User 结构作为模型?
struct MyUser {
userId string
firstName string
lastName string
password string
createdAtMs int64 // an extra field not available in the api
}
后续问题: 每种方法的优缺点是什么?它的最佳设计原则是什么?
【问题讨论】:
标签: database api go architecture grpc