Shopify GraphQL Admin API 速率限制成本和睡眠时间

awe*_*san 5 php shopify laravel graphql shopify-app

我正在尝试在 PHP ( Laravel ) 中使用 Shopify GraphQL API for Admin。
与 REST api 相比,GraphQL api 中的速率限制和节流工作方式不同,它是根据查询成本计算的。

Shopify GraphQL 查询的成本



需要记住的几点:

  • 一次 api 调用(查询)的最大可用成本为 1000。
  • 如果你已经消耗了1000点积分,每秒就会恢复50点积分。
  • 如果您的存储桶中的成本点较少,并且您进行的成本查询高于该点,则会受到限制。

我传递给 api 的查询的估计成本为502 ,由requestedQueryCost表示。而actualQueryCost表示API 针对特定商店返回的实际响应。

在上面的快照中,这是最坏的情况,对于订单数量较多的商店,requestedQueryCost等于acutalQueryCost 。

现在,当执行这个查询时,我已经消耗了 502 点,还剩下 498 点,经过 1 秒,添加了 50 点 = 548,我可以进行第二次 api 调用来获取第二页数据。第二次 api 调用后,我剩下的积分会减少,因此我必须休眠1或 2 秒才能获得进行 api 调用的积分。

在快照所示的情况下,我必须等待10 秒才能恢复500 点以进行下一次 api 调用。

问题:如何更好地确定不同商店的睡眠(等待)时间?我们不希望所有商店都等待 10 秒,即使它们的查询成本较低。

注意:有关代码参考,请参阅下面我的答案。

Dav*_*zar 1

您会得到每个商店的清晰的成本记录。如果一家商店的人数为零,那么另一家商店可能还有 1000 人在等着您。您应该确保您的调用机制对此很清楚!每个商店只休眠一个线程。您应该能够将请求分配给线程,这样,如果它休眠,您仍然可以与其他线程一起操作。如果 PHP 运行时将一个线程分配给所有请求,我会笑死的。这就是 1982 年的计算!