小滕的博客

小滕的技术点滴

AppKey的设计思考

5 months ago · 0 MIN READ
#PHP  #开发小技巧 

相信很多小伙伴们都了解 AppKey 这个关键字,在我们日常调用第三方服务接口的时候,基本上都有这么一个 AppKey 的存在。今天就来总结下这个 AppKey 的设计思考。

最简单的方法:随机字符串

按照一定的长度,我们生成随机字符串作为 AppKey 就可以了。这是最简单的方法,实施成本极低,在 Laravel 中,一句话就搞定了:

// 生成长度32位的随机字符串
Str::random(32);

虽然这种方法简单,但是隐藏的问题却很大。这种较长的随机字符串,存储到数据库之后,索引效果也打折扣且占用更多空间。所以,我们可以这样优化。

首先,我们需要维护一份 AppKeyuserid 的映射,这个映射关系可以存储到 redis 中,在我们查找 AppKey 对应用户的时候,我们先到 redis 里面查找对应的关系,找出 userid 之后再查找到响应的用户,这样,o(1) 的复杂度,速度提升了很多。但是这种方式,成本较高。

推荐方法:根据用户特征值编码处理

这种方法的思想是这样的:首先,我们选择用户的特征值,比如说:userid,确定好之后,我们对 userid 进行编码混淆处理,让用户感觉是随机生成的。具体的逻辑代码可以这样:

class App 
{
    public function encode($userid)
        {
            return base64_encode(date('Ymd') . $userid);
        }

        public function decode($str)
        {
            $str = base64_decode($str);
                $userid = substr($str, 8);
                return $userid;
        }
}

上面的代码中我们用 base64 进行编码处理,在生产环境当中,建议维护自己一份混淆的算法。这种方式,我们即生成了 AppKey ,也可以随时根据 AppKey 解码出 userid ,不需要做一层映射,更简单,更方便。

···

xiao teng



备案号:皖ICP备14012032号-5