作者:互联网控军 | 来源:互联网 | 2022-12-11 09:56
假设Player
我的.proto
文件已经定义了.
message Player {
string first_name = 1;
string last_name = 2;
int32 user_id = 3;
}
我正在使用https://github.com/twitchtv/twirp在我的Go后端和我的Javascript前端之间进行通信.如果您不知道Twirp,它只是JSON RPC over HTTP 1.1.
该Player
消息被转换成细末结构
type Player struct {
FirstName string
LastName string
UserId int32
}
众所周知,大写字段是公开的.但是我想保持UserId
私有,即将其设为小写.前端的用户不应该看到UserId
播放器的用户.在我的后端,我需要这些信息,所以我不能简单地删除该字段.
任何想法如何处理这种情况?我的.proto
文件中是否可以有私有字段?
1> icza..:
Protobuf用于通信,而不用于数据库建模.您应该使用protobuf来描述您打算通过客户端发送/接收的数据结构.
如果您不打算将用户ID发送到客户端,请不要在protobuf Player
定义中包含该ID .
在Player
您发送到客户端和Player
你在数据库存储并不一定是相同的.通常它们不相同,您通常存储其他字段,例如创建时间,数据库ID等不适用于客户端的字段.
所以你应该有两个独立的结构Player
,一个是服务器使用的(存储),另一个是客户看到的.当然,在定义这两个结构时,您可以利用另一个来防止重复,例如服务器播放器可以嵌入客户端播放器,例如:
新原型Player
:
message Player {
string first_name = 1;
string last_name = 2;
}
客户Player
:
type Player struct {
FirstName string
LastName string
}
服务器Player
:
type DBPlayer struct {
Player // Embed Player
UserId int32
}
当您DBPlayer
在服务器中加载a 时,您只会将该DBPlayer.Player
字段发送到客户端,其余的是"私有".