这个问题叫做 ID 混淆,
http://python.jobbole.com/85534/ 这篇文章介绍了一种混淆 ID 的方法。这个不要再数据库层做,数据库中的 ID 一定要使用自增 ID,要不然会影响索引。这个需要在视图层做,Python web 框架可以搭配 WSGI 中间件一起实现。
如果使用 Django 搭建 API 服务,可以这么实现
1. 为 ID 新建一种类型,IntID
2. model 层返回的 id 字段都是 intID 类型
3. 视图层不要返回 HTTP Response,返回字典。
4. (关键)写一个 wsgi 中间件,拦截响应,如果响应是字典,则使用 JSON 格式化,并返回一个 JSONHTTP Response。JSON 格式化的时候需要自己写 encoder,判断如果是 IntID 类型,使用上述的混淆方法格式化,这样返回的整数是被混淆的字符串了
5. (关键)写一个 WSGI 中间件,拦截请求,将 POST 和 GET 数据都封装成字典存放到 request 中。然后每个请求的数据都要使用类似于 Form 的东西来处理一遍。Form 中自己可以实现一个 field,叫做 IntID field,就是执行反混淆的任务,将字符串的 ID 转换成数字 ID。