仅使用内存的烧瓶应用程序的幂等请求
Flask-Idempotent-Memor的Python项目详细描述
烧瓶幂等记忆
这个叉是self-host video streaming project的一部分。在
Flask幂等元是Flask的一个非常简单(按设计)的幂等请求处理程序。作为扩展实现。最初的repo使用Redis作为锁和响应数据存储,相反,这个repo只是使用内存(一个字典变量和一个新类),以获得更高的速度和超级易用性,这将帮助您在Flask应用程序上的任何端点添加幂等性,只需单击几下。在
安装
$ pip install flask-idempotent-memory #(Not yet available)
使用
^{pr2}$<form> {{ idempotent_input() }} <!-- the rest of your form --></form>
就这样!(好吧,如果默认值对您有效)
工作原理
任何在请求参数或post数据中包含\\\\$u幂等项key或请求头中包含X-idempotent-key的请求都将作为幂等请求进行跟踪。这在默认情况下只生效240秒,但这是可配置的。在
当第一个带有密钥的请求进来时,Flask幂等元将尝试在密钥存储中获得幂等性。如果密钥存储中不存在该密钥,那么它将像正常情况一样处理请求,并将响应保存在密钥存储中,以备将来请求返回。在
任何后续(同时或其他)请求都不会被重新处理,因为它的响应已经生成并存储在密钥存储中。然后,它们将等待主请求完成,检索先前的响应并返回该响应。在
为了减少内存使用,每次读密钥存储时,密钥存储都会根据清理间隔检查当前时间,如果满足,则密钥存储将删除所有过期的密钥。在
我为什么要在乎?在
您不能信任用户输入。这是web开发的规则之一。这并不能阻止恶意攻击表单提交的行为,但当用户提交两次页面,或由于网络故障或其他原因发送两次api请求时,它将有所帮助。这将防止这些重复提交及其任何后续结果。在
#配置
烧瓶幂等性要求Redis起作用。它默认在本地机器上使用redis,并且可以使用以下配置值。把它们放在你的烧瓶里
# In seconds, the timeout for a secondary request to wait for the first to# completeIDEMPOTENT_TIMEOUT=60# In seconds, the amount of time to store the master response before# expiration in key storeIDEMPOTENT_EXPIRE=240
- 项目
标签: