跳到主要内容
Didit 融资 750 万美元,打造身份与欺诈基础设施
Didit
返回博客
博客 · 2026年3月6日

精通Didit API集成中的客户端限速 (ZH)

有效集成API需要强大的限速机制,以防止服务中断。本指南探讨了在JavaScript/TypeScript中实现客户端限速的策略,重点关注Didit的API,并。通过主动节流和指数退避策略,确保API调用的稳定性和可靠性。.

作者:Didit更新于
client-side-rate-limiting-didit-api-javascript-typescript.png

主动节流是关键X-RateLimit-Remaining低于15%时,实施客户端节流,以避免429错误并确保服务的持续可用性。

429错误的指数退避在收到429响应后重试请求时,始终使用指数退避策略(例如,5秒、10秒、20秒),防止进一步的限速违规。

利用Didit的标头Didit API提供的X-RateLimit-LimitX-RateLimit-RemainingX-RateLimit-Reset标头对于动态和智能的客户端限速至关重要。

Didit简化集成Didit的SDK和开发者优先的方法简化了API集成最佳实践的实施,包括内置机制和有效处理限速的指导。

理解API限速及其重要性

API限速是现代Web服务的一个基本方面,旨在保护基础设施免受滥用、确保公平使用并为所有用户维护稳定性。对于与身份验证平台等关键服务集成的开发人员来说,理解和遵守这些限制至关重要。在与Didit的API集成时,您将遇到特定的限速,旨在确保可靠和高性能的身份验证操作。

Didit实施多层限速,包括GET(每个应用程序每分钟300个请求)和写入/删除端点(每个应用程序每分钟300个请求)的全局限制,以及针对高影响操作更严格的特定端点限制。例如,POST /v2/session/(用于创建验证工作流)的限制为600 rpm,而GET /v2/session/<id>/decision/(用于检索会话决策)和GET /session/<id>/generate-pdf/由于其计算密集性而被限制为100 rpm。

超出这些限制将导致429 HTTP状态码(请求过多)。虽然这是一种服务器端保护,但有效的客户端限速对于防止您的应用程序达到这些上限至关重要,从而确保流畅的用户体验和不间断的服务。未能实施适当的客户端处理可能导致性能下降、验证失败以及给用户留下不好的印象。

JavaScript/TypeScript中客户端限速的策略

实施客户端限速涉及在服务器强制执行API限制之前预测和响应这些限制。这需要主动节流和响应式错误处理的结合。以下是关键策略:

1. 利用限速标头进行主动节流

Didit的API在429响应中包含特定的标头,这些标头对于客户端限速非常有用:X-RateLimit-LimitX-RateLimit-RemainingX-RateLimit-Reset(以epoch秒为单位)。您应该解析这些标头并使用它们来指导客户端的请求行为。

一个健壮的客户端将:

  • 监控X-RateLimit-Remaining主动跟踪剩余请求数。当此值低于某个阈值(例如,X-RateLimit-Limit的15%)时,您的客户端应开始排队请求或降低其传输速率。
  • 利用X-RateLimit-Reset此标头告诉您当前限速窗口何时重置。您可以使用此时间戳来安排客户端何时可以安全地恢复全速请求。

interface RateLimitHeaders {
  limit: number;
  remaining: number;
  reset: number; // epoch seconds
}

async function makeDiditRequest(url: string, options: RequestInit): Promise<Response> {
  // In a real app, you'd manage these globally or per-endpoint
  let currentRateLimit: RateLimitHeaders | null = null;

  // Implement a local queue or delay mechanism based on currentRateLimit
  // For simplicity, this example focuses on response handling.

  const response = await fetch(url, options);

  const limit = response.headers.get('X-RateLimit-Limit');
  const remaining = response.headers.get('X-RateLimit-Remaining');
  const reset = response.headers.get('X-RateLimit-Reset');

  if (limit && remaining && reset) {
    currentRateLimit = {
      limit: parseInt(limit, 10),
      remaining: parseInt(remaining, 10),
      reset: parseInt(reset, 10),
    };
    console.log(`Rate Limit: ${currentRateLimit.remaining}/${currentRateLimit.limit} requests remaining. Resets at ${new Date(currentRateLimit.reset * 1000).toLocaleTimeString()}.`);
  }

  return response;
}

2. 为429响应实现指数退避

当您的客户端确实收到429响应时,正确的做法不是立即重试。相反,应实施指数退避策略。这涉及在重试之间等待越来越长的时间,从而减少服务器上的负载并增加后续尝试成功的机会。Didit的429响应还包括一个Retry-After标头,它提供了一个具体的持续时间(以秒为单位),指示在重试之前应等待多长时间。如果存在此标头,请始终优先考虑它。


async function makeDiditRequestWithRetry(url: string, options: RequestInit, retries = 0): Promise<Response> {
  try {
    const response = await makeDiditRequest(url, options);

    if (response.status === 429) {
      const retryAfter = response.headers.get('Retry-After');
      const delay = retryAfter ? parseInt(retryAfter, 10) * 1000 : Math.pow(2, retries) * 1000; // Exponential backoff: 1s, 2s, 4s...
      console.warn(`Rate limit hit. Retrying in ${delay / 1000} seconds...`);
      await new Promise(resolve => setTimeout(resolve, delay));
      return makeDiditRequestWithRetry(url, options, retries + 1);
    }

    if (!response.ok) {
      throw new Error(`HTTP error! status: ${response.status}`);
    }

    return response;
  } catch (error) {
    console.error('Request failed:', error);
    throw error;
  }
}

// Example usage for a Didit session decision retrieval
// This endpoint is limited to 100 rpm.
// makeDiditRequestWithRetry(`/v2/session/${sessionId}/decision/`, { method: 'GET' });

3. 利用Didit的SDK简化集成

Didit为各种环境提供了强大的SDK,包括适用于Web应用程序的JavaScript SDK。这些SDK通常抽象了API交互的许多复杂性,包括处理常见的错误模式和为验证流程提供事件驱动的回调。尽管对于大批量、自定义API调用可能仍然需要明确的限速逻辑,但将SDK用于面向用户的验证流程(如身份验证、被动和主动活体检测或年龄估算)可以显著简化集成。

SDK专为面向用户的工作流设计,您的后端启动会话(POST /v2/session/),前端渲染验证UI。SDK处理与Didit服务的交互,从而减轻了在验证过程中从客户端直接管理单个API调用限速的负担。当与JavaScript SDK集成时,您使用后端提供的会话令牌对其进行初始化,它会管理流程,提供onSuccessonErroronCancel回调。

Didit如何提供帮助

Didit被设计为开发者优先的AI原生身份平台,提供灵活的集成选项,同时保持强大的性能。我们对API设计和SDK的方法本身有助于管理限速并确保平稳运行:

  • 清晰的限速文档:Didit提供所有API限速的透明详细文档,使开发人员能够有效地规划其集成。
  • 信息丰富的标头:包含X-RateLimit-LimitX-RateLimit-RemainingX-RateLimit-ResetRetry-After标头使开发人员能够构建智能、自调节的客户端应用程序。
  • 模块化架构:Didit的模块化设计意味着您只集成您需要的身份原语,例如用于文档检查的身份验证、用于欺诈检测的被动和主动活体检测,或用于年龄验证的年龄估算。这种有针对性的方法可以帮助优化您的API调用模式。
  • 简化工作流的SDK:我们的Web和移动SDK简化了复杂面向用户验证流程的集成。通过处理验证流程的复杂性,包括许多底层API调用,SDK抽象了这些特定交互的直接限速问题,让您能够专注于应用程序逻辑。
  • 免费核心KYC:Didit提供免费核心KYC,使企业能够以零前期成本开始使用基本的身份验证服务,从而更容易测试和优化您的集成策略,包括限速处理。

准备好开始了吗?

准备好了解Didit的实际应用了吗?立即获取免费演示

使用Didit的免费套餐免费开始验证身份。

身份与欺诈基础设施。

一个 API 即可实现 KYC、KYB、交易监控和钱包筛选。5 分钟即可集成。

让 AI 总结此页面
Didit API在JavaScript/TypeScript中的客户端限速.