Python 跟踪使用情况

Python 跟踪使用情况,许多公用的API都需要使用API Key(API密钥)。API提供者会要求使用者注册并提供电子邮件地址或其他联系信息,之后他们会提供一个API Key用于激活该API。

API Key可用于验证访问,也可以用于授权特定的功能,还可以用于跟踪使用情况。如果在给定的时间内API Key使用过频,还可以用它来限制请求。

在业务模型中有多种变化。例如API Key的使用可以是可计费事件。对于其他业务来说,流量必须在达到一定的阈值之后才会被要求付费。

其中重要的一点是API使用的不可抵赖性,反之这意味着创建的API Key可以用作用户身份验证的凭据。密钥必须难以伪造而易于验证。

创建API Key的一种简单方法是使用加密随机数来生成难以预测的密钥字符串。可以用模块secrets生成唯一的API Key,并且这些密钥值会分配给客户端用于跟踪使用情况。

>>> import secrets
>>> secrets.token_urlsafe(18*size)
'kzac-xQ-BB9Wx0aQoXRCYQxr'

针对随机字节码,我们使用Base64编码来创建字符序列。以3的倍数为长度可以避免Base64编码的尾部出现=符号。我们使用了URL安全的Base64编码,因此生成的字符串中不会包含/+字符。这意味着密钥可以用作URL的一部分,或者包含在报头中。

 更细致的加密方法并不会产生更随机的数据,使用secrets足以确保无法伪造已经分配给其他用户的密钥。

另一种选择是使用uuid.uuid4()来创建随机的UUID(universally unique identifier,通用唯一标识符)。它是一个包含36个字符的字符串,其中32个为十六进制数字,4个为-标点符号。随机的UUID也很难伪造。

还有一种选择是使用itsdangerous包来创建JSON格式的Web签名。它使用一个简单的加密系统来确保密钥在对客户端不透明的情况下,依然能为服务器所用。请访问http://pythonhosted.org/itsdangerous/以获取更多信息。

基于REST的Web服务器需要一个带有效密钥的小型数据库,还可能需要客户端的一些联系信息。如果一个API请求包含了数据库中已有的密钥,则代表请求是由相关用户发起的。如果一个API请求未包含一个已知的密钥,则可以通过一个简单的401 UNAUTHORIZED响应来拒绝该请求。由于密钥本身是一个24字符的字符串,因此数据库会非常小,很容易缓存到内存中。

该小型数据库可以是一个简单文件,并由服务器加载后将API Key映射至需要授权的权限上。可以在系统启动时和检测修改时间时读取该文件,查看服务器中缓存的版本和当前的版本是否一致。当有新的密钥可用时,该文件会更新,服务器将重新读取该文件。

普通的日志抓取可能足以显示某个特定密钥的使用情况了。更复杂的应用程序可能会在单独的日志文件或数据库中记录API请求以简化分析。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程