热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Protobuf,Go和私人领域

如何解决《Protobuf,Go和私人领域》经验,为你挑选了1个好方法。

假设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字段发送到客户端,其余的是"私有".


推荐阅读
author-avatar
互联网控军
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有