api - "reasonable"使用web API同步数据

标签 api web-applications asana

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

在这种特殊情况下,Web 应用程序是 Asana ,但我之前在其他服务中遇到过类似情况。有什么方法可以知道您是否通过过多的 API 调用滥用服务?我知道我不会去 DOS 像 Asana 这样的公司,但我无法摆脱这样一种感觉,即一定有比每天发出约 15 万个请求更好的方法。

我能想到的唯一其他选择是仅当我知道数据库发生变化时才更新网络服务,但那样我会失去很多功能。

对于这个问题的主观性,我深表歉意,但我真的希望有人能解释一下在使用公共(public) API 时是否需要遵守任何礼仪。

最佳答案

(我在 Asana 工作)

这是一个很好的问题,或者更确切地说是一组问题。

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

现在,我碰巧知道 Asana API 目前没有为您提供任何友好的机制来检测系统中的变化。这是一个普遍要求的功能,我们正在研究它,但遗憾的是我不能保证交付日期。因此,您可能别无选择,只能暂时轮询我们的系统。

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

也就是说,对于 Asana API 来说,每天 15 万个请求有点多。如果我们所有的 API 用户都给了我们那么多的流量,那么我们每天处理的请求可能会比 Google Web Search 多,而且我们的可扩展性还不够。 :) 从技术上讲,有时我们可能会处理来自单个用户的那个数量的请求。

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

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

关于api - "reasonable"使用web API同步数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12147237/

相关文章:

java - 如何以编程方式将事件添加到 Outlook 日历或 Google 日历?

asana - 无法设置 due_on=null

java - 针对特定场景从 POJO 生成 JSON

jquery - 我需要取消设置 jQuery .toggle(odd,even) 的状态

android - 如何从android中的google plus api获取oauth 2.0 token ?

google-apps-script - 如何强制 code.js 函数出错?

python - 用于检查 PAT 到期日期的 Azure DevOps API

asp.net - Web 应用程序需要 WCF 吗?

polling - 如何通过 API 从 Asana 获取更新

json - 如何使用 Asana API 使用 opt_fields 获取子任务?