Facebook图形API速率限制和批量请求

27

我看到有一些人提到600次/ 600秒的调用速率限制(例如在Quora上)。

我想知道的是,我是否可以在600秒内执行600个批量请求(一个批量请求最多包含50个请求)。


1
我们目前将批量请求的数量限制为50个。50个什么?每分钟、每天、每个用户的请求次数? - Xeoncross
我也想知道同样的事情。50个并发请求,每分钟请求次数,每天请求次数,每次换尿布请求次数? - josef.van.niekerk
2
嗯...我本来想取笑一下FB,但是阅读他们的文档后事情变得清晰了:“我们目前将批处理中的请求数量限制为50个,但是每个批处理中的调用都会单独计算API调用限制和资源限制。例如,一个包含10个API调用的批处理将被计算为10个调用,并且批处理中的每个调用都以相同方式对CPU资源限制做出贡献。” - Henley
因此,批处理的唯一目的是减少HTTP负载/延迟,由于较大的HTTP请求更加笨重且更容易出现超时错误,因此我宁愿坚持使用非批处理请求,或仅将小数据集的请求批处理在一起。 - Erik Kaplun
5个回答

12
您应该通过编程方式处理速率限制,检查以下错误信息。如果遇到此错误,请在下一次调用之前放置一个等待时间循环。我的高流量应用程序中有一个帐户会注意到这个错误,并减慢速度。
来源:https://developers.facebook.com/docs/bestpractices/ 引用: Rate limited (API_EC_TOO_MANY_CALLS) 如果您的应用程序调用太多,则 API 服务器可能会自动限制速率,返回“API_EC_TOO_MANY_CALLS”错误。通常不应该发生这种情况。如果确实发生了这种情况,则是因为已确定您的应用程序正在进行太多 API 调用。迭代您的代码,以便尽可能少地进行调用,以维护所需的用户体验。您还应避免复杂的 FQL 查询。要了解是否对您的应用程序进行了限制,请转到 Insights 并单击“限制”。
编辑:
正如 Igy 在评论线程中报告的那样,该批中的每个请求都计为1。对于您的最大限制为600的示例,这意味着您可以触发包含50个调用的15个批处理请求。

9
谢谢指出最佳实践。我的问题是,批量请求和单个请求是否都会算作限制内的1个请求。 - daremon
3
有人知道原问题的答案吗?我知道应该处理太多调用错误代码,但我仍然想知道批量请求是否在API速率限制方面计为多个请求。 - heyman
4
一次50个批量请求算作50个API调用 - 主要优势是可以设置依赖关系并降低对API的往返调用次数 - 但这不会影响调用或资源限制。 - Igy
1
现在,这是关键。这些费率适用于哪个访问令牌?我有一个批处理过程,导入大约800个帐户的帖子,即使我在批处理请求中为每个请求设置了显式访问令牌,如果我不将其限制为总共每秒1个请求(无论令牌如何),我仍然会受到速率限制。 - thefreeman
@thefreeman:如果您不使用批处理,而是单独使用令牌会怎样呢? - Erik Kaplun
显示剩余6条评论

8
根据Facebook文档,批处理中的每个元素都计算为单独的调用。
我们目前将批处理中的请求数量限制为50个,但是批处理中的每个调用都被单独计算,以计算API调用限制和资源限制。例如,10个API调用的批处理将计算为10个调用,并且批处理中的每个调用以相同方式对CPU资源限制做出贡献。
引自: https://developers.facebook.com/docs/reference/api/batch/ 我没有实证证据。
David

6

根据我的经验,无论请求以批处理还是单个请求的形式发送,它们都会计算每个请求。

例如,如果我试图每秒执行包含10个请求的1个批处理,则很快就会出现“TOO MANY CALLS”的错误提示。

如果我每10秒进行1次批处理,每个批处理包含10个请求,那么我就永远不会看到“TOO MANY CALLS”的错误提示。

就我个人而言,我没有什么理由更喜欢批处理而不是常规的API调用。


5
我现在对Facebook API有着相当大而痛苦的经验,我可以说:
  • 如果批处理请求包含50个请求,则Facebook会将其视为50个请求
  • 1个请求≠1个调用。Facebook有自己的定义,一个调用是什么。如果您的请求很大,返回了许多数据或消耗了大量CPU,则它将被计算为多个调用。

我正在执行的最频繁的Graph API调用包含许多嵌套字段,我已经注意到我只做了200次就达到了“每600秒600个调用”的限制,因此在我的情况下,这个调用次数为3...

您还有很多其他速率限制,但没有一个得到了正确的文档说明...


2

批量调用在批处理中每个项目都是计算的。使用50个项目进行的一次批处理调用相当于使用图形界面进行了50次API调用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接