技能 编程开发 Lucidchart API速率限制管理

Lucidchart API速率限制管理

v20260423
lucidchart-rate-limits
本指南详细介绍了与Lucidchart API交互时的速率限制管理方法。它明确了不同操作(如创建形状、列出文档、导出)的具体限制,并提供了基于令牌桶的速率限制器实现和健壮的重试策略。使用此知识可以构建可靠的自动化工作流,确保程序在处理大量数据或进行批量操作时不会因API调用频率过高而被限制。
获取技能
315 次下载
概览

Lucidchart Rate Limits

Overview

Lucidchart's API enforces per-OAuth-token rate limits, with document mutation operations (creating shapes, updating pages, modifying text) throttled more aggressively than read-only document listing. Automations that programmatically generate architecture diagrams or org charts from external data sources can easily exceed write limits when placing dozens of shapes and connectors in a single batch. Image export endpoints carry additional latency due to server-side rendering, making export-heavy workflows the most common throttling bottleneck.

Rate Limit Reference

Endpoint Limit Window Scope
List documents 120 req 1 minute Per OAuth token
Get document / pages 60 req 1 minute Per OAuth token
Create/update shapes 30 req 1 minute Per OAuth token
Export to PNG/PDF 10 req 1 minute Per OAuth token
Create document 15 req 1 minute Per OAuth token

Rate Limiter Implementation

class LucidRateLimiter {
  private tokens: number;
  private lastRefill: number;
  private readonly max: number;
  private readonly refillRate: number;
  private queue: Array<{ resolve: () => void }> = [];

  constructor(maxPerMinute: number) {
    this.max = maxPerMinute;
    this.tokens = maxPerMinute;
    this.lastRefill = Date.now();
    this.refillRate = maxPerMinute / 60_000;
  }

  async acquire(): Promise<void> {
    this.refill();
    if (this.tokens >= 1) { this.tokens -= 1; return; }
    return new Promise(resolve => this.queue.push({ resolve }));
  }

  private refill() {
    const now = Date.now();
    this.tokens = Math.min(this.max, this.tokens + (now - this.lastRefill) * this.refillRate);
    this.lastRefill = now;
    while (this.tokens >= 1 && this.queue.length) {
      this.tokens -= 1;
      this.queue.shift()!.resolve();
    }
  }
}

const writeLimiter = new LucidRateLimiter(25);
const exportLimiter = new LucidRateLimiter(8);

Retry Strategy

async function lucidRetry<T>(
  limiter: LucidRateLimiter, fn: () => Promise<Response>, maxRetries = 3
): Promise<T> {
  for (let attempt = 0; attempt <= maxRetries; attempt++) {
    await limiter.acquire();
    const res = await fn();
    if (res.ok) return res.json();
    if (res.status === 429) {
      const retryAfter = parseInt(res.headers.get("Retry-After") || "20", 10);
      const jitter = Math.random() * 2000;
      await new Promise(r => setTimeout(r, retryAfter * 1000 + jitter));
      continue;
    }
    if (res.status >= 500 && attempt < maxRetries) {
      await new Promise(r => setTimeout(r, Math.pow(2, attempt) * 2000));
      continue;
    }
    throw new Error(`Lucidchart API ${res.status}: ${await res.text()}`);
  }
  throw new Error("Max retries exceeded");
}

Batch Processing

async function batchCreateShapes(docId: string, pageId: string, shapes: any[], batchSize = 5) {
  const results: any[] = [];
  for (let i = 0; i < shapes.length; i += batchSize) {
    const batch = shapes.slice(i, i + batchSize);
    const batchResults = await Promise.all(
      batch.map(shape => lucidRetry(writeLimiter, () =>
        fetch(`${LUCID_BASE}/documents/${docId}/pages/${pageId}/shapes`, {
          method: "POST", headers,
          body: JSON.stringify(shape),
        })
      ))
    );
    results.push(...batchResults);
    if (i + batchSize < shapes.length) await new Promise(r => setTimeout(r, 8000));
  }
  return results;
}

Error Handling

Issue Cause Fix
429 on shape creation Exceeded 30 writes/min token limit Batch shapes, space 3s apart
429 on PNG export Export limit (10/min) is very low Queue exports with 8s spacing
408 on large document Export rendering timeout Request single page, not full doc
401 token expired OAuth token TTL exceeded Refresh token before batch operations
409 concurrent edit Another user editing same page Retry after 5s with fresh page version

Resources

Next Steps

See lucidchart-performance-tuning.

信息
Category 编程开发
Name lucidchart-rate-limits
版本 v20260423
大小 4.39KB
更新时间 2026-04-26
语言