如何生成一个APP_ID

1. 什么是APP_ID

开放平台使用APP_ID, 来区分openapi的调用者, 相当于用户的一个身份证

用过开放平台的开发者 懂得都懂,不懂的说了也不懂,你也别问,利益牵扯太大,说了对你们没好处,我只能说水很深,网上的资料都删了,所以我只能说懂得都懂,不懂也没办法


2. 各家的APP_ID长什么样

● 微信的APP_ID

统一wx开头, "wx"+16位的 16进制数字

微信的APP_ID
微信的APP_ID

● 支付宝的APP_ID

16位的纯数字, 可以看出开头的4位是年份, 其他数字生成规则不明

支付宝的APP_ID
支付宝的APP_ID

● 融云的APP_ID

13位数字和字母组成的字符串, 生成规则不明

融云的APP_ID
融云的APP_ID

● 我设计的APP_ID

11位英文字母的组合

我设计的APP_ID
我设计的APP_ID

3. APP_ID需要满足什么需求

  1. APP_ID会频繁在开放平台的接口调用中被使用, 所以不能太长, 浪费带宽
  2. APP_ID可能被别人获取, 所以不能包含太多私有信息, 所以要有一定的随机性
  3. APP_ID很多情况下要方便客户以及开放平台的人员进行调试, 所以可以包含一定公开的信息; 什么样的信息是允许公开的需要开放平台的设计者斟酌, 如将集群信息暴露在APP_ID上,方便快速缩小检查范围
  4. APP_ID的长度要稳定, 不能一会儿长一会短显得不专业

4. 我的设计

下面介绍一下我是怎么设计APP_ID的

下面说一下我的app_id生成步骤

  1. 生成一个4位的十进制数字(1000~9999)
  2. 获取当前时间的时间戳, 13位十进制数字
  3. 组合成为一个 17 (4+13) 位的十进制数字
  4. 将这个17位的十进制数字转化为 36 进制数字(0~9,a~z; 一共36位)
/**
 * 先构造一个十进制的数字,
 * 前四位: 为随机值(1000,9999),
 * 后13位: 为时间戳 (类似于这种形式1631238326627)
 * 然后将该数字转换为字符串
 * 再用36进制重新解析([0-9]|[a-z]), 数字和小写字母
 * 得到的字符串长度为11个字节
 *
 * @return 生成的字符串用作app_id, 是个11个字节的字符串
 */

public static String generateAppId() {
    final String s = RandomUtil.randomInt(10009999) + String.valueOf(System.currentTimeMillis());
    BigInteger n = new BigInteger(s, 10);
    return n.toString(36);//转换成36进制, 得到的字符串长度11个字节
    //10000000000000000 转化之后是: 2qgpckvng1s ; 也是11个字节
    //99999999999999999 转化之后是: rcn1hssighr ; 也是11个字节
}

根据这个算法得到的APP_ID

  • 得到的字符串稳定11个字节 (utf8编码)
  • 生成的字符串有较强的随机性
  • 不包含任何私有信息

作为一个小厂的开发, 没有那么多需求, 只要生成的APP_ID有随机性,长度稳定, 长度不太长 就够用了

希望这篇辣鸡文章对你有帮助

- END -

本文由 mdnice 多平台发布

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
该项目是一个基于java开发的服务器-客户端模式的安卓英语学习软件,主要功能点就是背单词,中英文翻译,OCR文字翻译。 服务器端使用springboot,mybatisplus,MySQL,mongodb,redis等技术,实现用户登录验证,token验证,以及返回客户端数据等功能。 客户端使用java开发安卓,也是首次使用了jackpet的部分组件进行开发,如ViewModel,LiveData,Navigation等组件 前后端: 前后端交互逻辑: Java端: Controller 层有三个controller,负责接受安卓端发送来的请求,然后调用Service层的服务或者Dao层的服务(dao层有服务属于设计失误),然后服务处理完业务之后,就会将结果返回到controller中,最后controller发送结果到安卓端。 一个简单的示例: 功能一: ​ 首先WordController接受到来自安卓客户端的请求,然后调用Dao层的MongodbMapperImpl,到Mongodb数据库查询,最后将结果序列化为json,返回到安卓端中。 功能二: ​ UserControler接受登录请求,然后调用LoginService ,LoginService使用Dao层的UserMapper 到Mysql数据库中查询验证,然后将验证结果返回到Usercontroller中,UserController再将数据返回到安卓客户端 1 服务端 Service_For_Android 1.1 主要功能简述 功能一:返回数据 首先,安卓端需要的数据有两种,来源分别是这个服务端、第三方接口(有道翻译,百度翻译)。这里介绍服务端的数据 一种是用户数据,也就是用户的账号密码,用户记了的单词,用户没有记的单词,用户收藏的单词。这种数据使用MySQL进行保存。 第二种是单词数据,也就是该App的词库,记录了每个单词的英文,中文,音频URL,示例图片,示例句子等信息。这种数据使用mongodb进行保存。 功能二:验证用户的登录,拦截访问 验证用户的登录,这个功能就是获取到客户端发来的账号密码,然后到MySQL数据库中进行查询验证,验证失败则返回失败。验证成功,则使用用户的id为其生成一个token并返回;同时将用户对象序列化为json,存储到redis中,方便随取随用。 拦截访问,服务端配置了一个拦截器,用来检查请求头中是否有携带token,拥有token才能访问除登录以外的接口。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值