如何在Python API中处理速率限制

oxcyiej7  于 2022-12-15  发布在  Python
关注(0)|答案(1)|浏览(120)

我正在向Salesforce Marketing Cloud API发出SOAP请求,以便从一个总共有1,000,000条记录的对象中以2500条为一批检索Data Extension对象记录。不幸的是,由于DE名称长度方面存在一个缺陷,SDK不是一个选项。大约运行到一半时,在运行正常后,我收到了500条响应,随后失败。从我所读到的内容来看,这是由于节流:
https://developer.salesforce.com/docs/marketing/marketing-cloud/guide/rate-limiting-errors-codes.html

**一般来说,处理API请求内速率限制的好方法是什么?**您是否添加睡眠计时器以在后续调用之间给予更多时间?或者您是否捕获500响应(或您收到的任何错误响应),然后从那里添加睡眠计时器?

这是我第一次遇到这种情况,所以我很感激任何指导/资源,并很高兴从那里测试。

6tqwzwtp

6tqwzwtp1#

首先也是最重要的,不要让你的应用直接调用SOAP,而是编写一个实用程序库,并让应用总是经历这个过程。
请参阅文档以了解相关的速率限制策略。您需要知道每小时可以接受多少个请求。
你的库应该维护一个全局的内存数据结构,记住最近的事务次数和计数。也就是说,你应该知道你最近有多忙碌,以及你离速率限制的边缘有多近。如果你快到了,考虑睡一觉。一定要记录所有的事情,带 * 时间戳。
在您引用的URL中,请特别注意第二个时间戳:

<wsu:Created>2017-02-01T19:07:24Z</wsu:Created>
        <wsu:Expires>2017-02-01T19:12:24Z</wsu:Expires>

当你的库最终收到一个错误响应时,它应该使用第二个(未来的!)时间戳来智能地选择休眠时间,它告诉我们何时解除禁令--在此之前的尝试将是徒劳的。
比需要的时间稍微长一点。你的目标应该是总是保持在略低于极限的水平。
为此编写单元/集成测试。整个系统庞大而复杂。你需要确信你理解它并能预测它的行为。有时会有服务器端的变化,你不希望这些变化造成你必须跟踪的难以诊断的Heisenbugs
您需要测试故意触发服务器端速率限制,然后成功恢复。您还需要测试演示保持略低于限制的高事务速率。

相关问题