协议设计:只要是ID,其数据类型建议为String

最近在支援一个项目,因为是后期过去的,所以协议的校对都没从我这里过,然后刚好要用到一个uid,突然看到一个数字 5 。不由得几分抗拒。

首先说ID是什么,通常是指唯一标示,比如系统唯一的一位用户。

从安全性:如果ID是int类型
  • 只要接口设计稍不合理,系统用户信息就可能被爬虫盗刷。
  • 用户数量只要试一试接口就知道了。
从可维护性:如果ID是int32/int64类型
  • 不利于扩展的点在于,一般说int,android默认是java Interger,只是32位的Int。后面升级成Long之后,还要改一波客户端。
  • js Number有精度丢失的问题,超过整数超过53位之后,后面几位是随机变的。前端拿到的ID从一开始就是错的。
  • 不利于平行扩展。想一下这样一种场景,如果日注册用户数很大,那么为了高可用高并发,必须做ID的分段,这时候int32就明显不够用了。
  • 不利于做安全加密方面的扩展。

项目进行到一半,我说要改。后端的同事就说放心放心,到不了这个用户级别;还说产品那边都没这样的设计,你操什么心。

我。。。觉得不行。。哎。。

正常我们是怎么做的呢?
  • 只要是ID其数值类型就是String
  • 为了高并发高可用,用户ID的生成可能是在多部机器上的,分段生成的,根据生成规则生成之后,对ID信息做加密
  • 所有用户信息必须在登陆后获取。若高频获取用户信息,触发安全机制,返回假数据

.
.
.

玩~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值