API指南

API.

我们的许多商家都使用我们的API进行不同的目的。 API访问包含在所有计划中,因为我们相信您是数据的所有者,并且您应该永远不会觉得您的数据“已锁定”。

但是,因为API意味着很少或没有用户交互,所以可以很容易地创建一个程序或例程,这导致我们的系统不必要的高负担。即使是小帐户也可以通过意外产生大量昂贵的API请求。

为了为每个人保持高质量的服务,我们要求您在实施API集成时要谨慎,以避免运行的使用情况,这些使用不成比例到帐户的大小。

以下是一些提示和最佳实践,以帮助保持您的网站和我们的业务顺利运行。

获取订阅状态

您可能希望检查您的客户是否有活动账户,已取消,或落后于他/她的付款。最好的方法是在您自己的数据库中保留订阅状态的本地缓存副本。您可以使用 Webhooks. 在近期实时保持最新的任何变化。这使您的网站保持起来,减少了与Chargify的耦合,并确保两个站点尽可能快地保持。

避免将Chargify in-Line查询为客户请求的一部分。这样做可能会导致:

  • 当客户等待支票以在每个请求上进行Chargify时,减慢您自己的网站。
  • 如果有网络连接问题或在Chargify的不太可能的事件中,您的网站也将突破。
  • 随着您的增长,您的客户更加活跃,您将使用大量的API请求,这可能导致由于我们的自动滥用预防而被阻止。

同步数据库

通常,您应该通过使用即可保持本地客户数据库 Webhooks. 。但是,如果您认为您的数据库已与Chargify失效,那么使用API​​检查所有订阅的状态可能是确保一致性的唯一方法。

根据需要这样做是完全可以的。但通常只在特殊情况下或周期性和解(通常每月不超过一次)。

报告用法

报告组件使用时,避免发送大量的微小使用量。例如,如果您在分钟内收取电话,例如:

  • 单独发送每分钟或每个电话的用法。
  • 立即向所有客户发送所有用法。将其传播或等待每个请求之间的短时间

反而:

  • 每天发送一次用法报告一次,每天使用多少客户。

有关报表组件使用或分配的更多信息,请参阅所用组件类型的特定部分:

下载批量数据

定期导出事务,订阅或客户数据是常用情况。可能,我们建议使用内置 出口 Chargify内部的函数要生成报告并下载数据。这通常会更快,可以显着降低您的API使用率。

关于限制& Blocks

您可能会遇到两种不同类型的限制/块:基于速率和基于帐户。请熟悉两种类型的限制,因为它们非常不同。

我们的速率限制规则主要旨在防止失控脚本,无限循环或破碎的并发量。工作,良好卫生代码不应遇到任何街区。单一最重要的指导方针是通过在不崩溃的情况下减慢或暂停请求,写入将正确处理429响应的代码,并不将其并行化为与资源和泛滥我们的系统竞争的同时请求。

Chargify使用基于自定义算法的插槽的限制,这不是基于典型速率限制/秒。相反,我们处理基于并发性的呼叫限制,并且可以在4个并发请求的最大值请求API调用。这并不意味着每秒仅允许4个请求 - 相反,4个服务器线程/工人一次可以同时运行。任何超过4的并发性都是在并发后再次丢弃到可接受范围后的处理的风险。因此,我们建议在构建API流程时关注并发调用的数量而不是每小时的实际呼叫速度。

为了帮助说明这一点,我们提供了下图。假设每个API呼叫都需要一分钟。虽然您自己的进程可能不是这种情况,但它确实说明了呼叫的限制。

基于并发的速率限制在一次2个线程的限制。

基于速率的块

在执行大量同步或检索大量数据时,您可能会触发用于防止滥用和保护我们网站免受攻击的安全故障安全性。我们不想阻止小爆发用法。因此,Chargify将慢速拒绝您的请求,而不是立即拒绝您的请求。

如果您看到您的回复速度较慢,请不要将您的请求并行化或尝试制作更多并发请求以加快速度。您只需要等待更长时间的要求才能完成。

If you have too many slowed requests, or your individual account queue gets too full with too many concurrent requests, you’ll likely receive an HTTP 429 Too Many Requests response code with a message and a reference code:

Your request was denied due to a usage violation. You can track this request with support by referencing …

If you receive a 429 Too Many Requests response, your code should be prepared to handle it by pausing its queries, waiting a few minutes, and then proceeding slower (or with less concurrency). Please feel free to 联系支持 因此,我们可以帮助描述发生的事情以及为何被阻止的原因。

基于帐户的块

有一些方案可能最终导致即使具有正确的凭据也被阻止被阻止。你可以读到他们 这里 . If you have a request blocked with a 422 status code and an error message, it may be due to this account-based blocking.

终点的优先级

我们将某些端点视为“关键”,例如新的客户注册和组件分配。我们首先要确保在最极端的情况下,我们不会确保我们不会阻止新的签名。许多商家都有一系列不同类型的呼叫。通过动态平衡,我们可以减缓“低优先级”请求(报告和出口),同时仍在处理中的巨大意外浪涌。

端点差异

每个端点在充电器中不同。昂贵的端点具有比快速端点更低的限制。但总的来说,由于向同一端点发送太多的同时请求,您的请求将减速。当您这样做时,您的请求将在自己身后“排队”。一个请求必须等待它前面的一个。通过这种方式,我们在更长的一段时间内'级别的尖峰,以便它不会对其他商家产生负面影响。这就是为什么您看到以较慢的速率处理请求的原因。

超时限制

Chargify为所有端点的所有请求施加120秒的截止时间。值得注意的是,当您对特定操作的请求时,Chargify还将这些请求发送到您的相关网关。如果在120​​秒的120秒内的Chargify和Gateway的组合未处理请求,请求将超时。

请记住,如果您遇到超时问题,值得检查网关的 当前状态。 如果您认为在Chargify的控制之外有一个处理问题,这也很重要,这是影响您的要求。