“合理”使用Web API来同步数据

时间:2012-08-27 18:12:14

标签: api web-applications asana etiquette

我的目标是将Web应用程序与内部数据库同步。 Web应用程序有一个公共API,但为了完全同步这两个源,我每次需要进行大约2000次单独的API调用。我的直觉告诉我,这是过分的,可能是不负责任的,但我缺乏确切知道的经验。

在这种特殊情况下,Web应用程序是Asana,但我之前遇到过与其他服务类似的情况。有没有办法知道你是否通过过多的API调用滥用服务?我知道我不会去像DOS这样的Asana这样的公司,但我不能感觉到必须有一个更好的方式,而不是每天提出~150k的请求。

我能想到的唯一另一个选择是,只有当我知道数据库发生了变化时才更新网络服务,但我会失去很多能力。

我为这个问题的主观性而道歉,但我真的希望有人可以解释在使用公共API时是否存在任何预期的礼仪。

1 个答案:

答案 0 :(得分:4)

(我在Asana工作)

这是一个很好的问题,或者说是一系列问题。

您正在设计一个会重复为每个对象发出请求的系统。随着对象数量的增长会发生什么?即使您的初始请求率是合理的,这也会遇到可伸缩性问题。更具伸缩性的解决方案是根据系统中更改的数量进行扩展。这也将随着时间的推移而增长,但速度要慢得多 - 单个用户每天可以进行的更改数量相对恒定,但随着时间的推移,他们创建的对象总数会增长和增长。因此,我的第一条建议是避免以这种方式做事,而是找到一种方法来检测变化并采取行动。有趣的是要知道为什么你会因为采用这种方法而失去能力。

现在,我碰巧知道Asana API不会当前为您提供任何友好的机制来检测系统中的变化。这是一个常见的功能,我们正在调查,但遗憾的是我不能保证交货日期。所以你可能别无选择,只能现在轮询我们的系统。

至于对API的礼貌,许多服务提供商对其API使用设置了限制,以防止意外或恶意使用API​​影响服务给其他客户--Asana也不例外。有时会公布这些限制,有时则不会,并且没有标准限制:这一切都取决于服务。但是对于服务限制感到好奇是非常周到的。

也就是说,对于Asana API,每天150k的请求很多。如果我们所有的API用户都给了我们这么大的流量,那么我们每天可能会提供比Google网页搜索更多的请求,而且我们还不是那么具有可扩展性。 :)从技术上讲,有时候,我们可能会从单个用户处理该卷的请求。

如果您必须轮询,请尝试按15分钟的间隔进行轮询。但请不要在这段时间内轮询整个工作区;它可能是太多的流量/数据。我们正在努力为您提供更好的解决方案。

如果您确实发出过多的Asana API请求,您将获得HTTP状态代码429而不是您想要的响应;你可以在这里阅读更多相关信息(https://asana.com/developers/documentation/getting-started/errors)。