ChartQuery

Best Practices

Holen Sie das Beste aus der ChartQuery API heraus mit diesen Empfehlungen für Zuverlässigkeit, Effizienz und Sicherheit.

Befolgen Sie diese Richtlinien, um zuverlässige, kosteneffiziente und leicht wartbare Integrationen zu erstellen.

Krediteffizienz

Guthaben vor großen Stapelverarbeitungen prüfen

Überprüfen Sie vor dem Auslösen einer hochvolumigen Operation, ob Sie genügend Credits haben. Der Usage-Endpunkt ist kostenlos und gibt Ihren aktuellen Kontostand in Echtzeit zurück.

curl "https://api.chartquery.com/v1/usage" \
  -H "x-api-key: YOUR_API_KEY"

Aktivieren Sie die Automatische Aufladung, um Ihr Guthaben automatisch aufzufüllen, wenn es unter einen Schwellenwert fällt, damit Ihre Workflows ohne Unterbrechung weiterlaufen.

Redundante Aufrufe vermeiden

Cachen Sie Ergebnisse auf Ihrer Seite, wenn sich die zugrunde liegenden Daten zwischen Anfragen wahrscheinlich nicht ändern. Das erneute Abrufen identischer Eingaben verschwendet Credits.

const cache = new Map<string, unknown>()

async function fetchCached(key: string, fetcher: () => Promise<unknown>) {
  if (cache.has(key)) return cache.get(key)
  const result = await fetcher()
  cache.set(key, result)
  return result
}

Nur das aufrufen, was benötigt wird

Jeder Endpunkt hat einen definierten Kreditkostensatz, der auf der Credits-Seite aufgeführt ist. Bevorzugen Sie leichtere Endpunkte, wenn keine vollständige Antwort erforderlich ist.


Authentifizierung

Schlüssel in Umgebungsvariablen speichern

Kodieren Sie Ihren API-Schlüssel niemals fest im Quellcode. Verwenden Sie Umgebungsvariablen und laden Sie sie zur Laufzeit.

const apiKey = process.env.CHARTQUERY_API_KEY
if (!apiKey) throw new Error("API key is not set")
import os
api_key = os.environ["CHARTQUERY_API_KEY"]
$apiKey = getenv('CHARTQUERY_API_KEY');
apiKey := os.Getenv("CHARTQUERY_API_KEY")

Separate Schlüssel pro Umgebung verwenden

Erstellen Sie separate API-Schlüssel für Entwicklung, Staging und Produktion in Ihrem Dashboard. So können Sie einen kompromittierten Schlüssel sperren oder rotieren, ohne andere Umgebungen zu beeinträchtigen.

UmgebungEmpfohlene Kategorie
Lokale Entwicklungdevelopment
CI / Stagingdevelopment
Produktionproduction

Schlüssel regelmäßig rotieren

Behandeln Sie API-Schlüssel wie Passwörter. Setzen Sie ein Ablaufdatum für sensible Schlüssel und rotieren Sie sie regelmäßig über den Bereich API-Schlüssel in Ihren Kontoeinstellungen.

Exponieren Sie Ihren API-Schlüssel niemals in clientseitigem Code, Browser-Anfragen oder öffentlichen Repositories. Leiten Sie Aufrufe immer über Ihr eigenes Backend.


Fehlerbehandlung

HTTP-Statuscode immer prüfen

Gehen Sie nicht davon aus, dass eine Anfrage erfolgreich war. Jede Antwort sollte vor der Verarbeitung des Bodys gegen ihren HTTP-Statuscode geprüft werden. Lesen Sie die Fehlerbehandlungs-Anleitung für eine vollständige Übersicht.

Bei vorübergehenden Fehlern wiederholen

Serverfehler (500) und Netzwerk-Timeouts sind vorübergehend. Implementieren Sie exponentielles Backoff für automatische Wiederholungen:

async function fetchWithRetry(url: string, options: RequestInit, maxRetries = 3) {
  for (let attempt = 0; attempt <= maxRetries; attempt++) {
    try {
      const res = await fetch(url, options)
      if (res.status === 500 && attempt < maxRetries) {
        await new Promise(r => setTimeout(r, 500 * 2 ** attempt))
        continue
      }
      return res
    } catch {
      if (attempt === maxRetries) throw new Error("Max retries reached")
      await new Promise(r => setTimeout(r, 500 * 2 ** attempt))
    }
  }
}

Niemals 402 ohne Aufladung wiederholen

Eine 402 Payment Required-Antwort bedeutet, dass Ihr Guthaben leer ist. Eine sofortige Wiederholung des Aufrufs hilft nicht. Laden Sie Credits über Ihr Dashboard auf oder aktivieren Sie die Automatische Aufladung.


Ratenlimits

Anfragen zeitlich verteilen

Wenn Sie viele Aufrufe senden müssen, verteilen Sie diese über die Zeit, anstatt sie alle auf einmal zu senden. Eine einfache Verzögerung zwischen Iterationen verhindert das Erreichen von Ratenlimits.

const DELAY_MS = 100 // adjust based on your plan

for (const item of items) {
  await processItem(item)
  await new Promise(r => setTimeout(r, DELAY_MS))
}

Die Antwort 401 Rate Limit Exceeded überwachen

Bei einer Ratenbegrenzung gibt die API 401 mit dem Status Rate Limit Exceeded zurück. Warten Sie und wiederholen Sie dann. Erwägen Sie ein Upgrade Ihres Plans, wenn Sie regelmäßig Limits erreichen.


Sicherheit

Niemals API-Aufrufe vom Browser aus tätigen

Ihr API-Schlüssel wäre für jeden sichtbar, der den Netzwerk-Tab überprüft. Leiten Sie Aufrufe immer über Ihren eigenen Server.

Browser → Your backend → ChartQuery API

Eingaben validieren und bereinigen

Wenn Ihre Anwendung benutzerseitige Parameter akzeptiert, die an die API weitergegeben werden (URLs, Suchanfragen, etc.), bereinigen Sie diese, um Injection-Angriffe oder unerwartetes Verhalten zu verhindern.


Überwachung

Kreditverbrauch verfolgen

Fragen Sie den Usage-Endpunkt planmäßig ab (z. B. täglich) und lösen Sie eine Benachrichtigung aus, wenn der Verbrauch einen Schwellenwert überschreitet. Dies verhindert Überraschungen am Ende eines Abrechnungszeitraums.

MetrikWarum es wichtig ist
remainingWarnt Sie, bevor Credits aufgebraucht sind
subscription.percent_usedVerfolgt Ihre Planauslastung
credits.remainingÜberwacht das Guthaben zusätzlicher Credits

Anfrage-Kontext protokollieren

Speichern Sie den HTTP-Statuscode und einen Zeitstempel für jeden API-Aufruf. So lässt sich der Kreditverbrauch leicht prüfen und Fehler im Nachhinein debuggen.

async function apiCall(endpoint: string, params: Record<string, string>) {
  const url = new URL(`https://api.chartquery.com${endpoint}`)
  Object.entries(params).forEach(([k, v]) => url.searchParams.set(k, v))

  const res = await fetch(url.toString(), {
    headers: { "x-api-key": process.env.API_KEY! },
  })

  console.log(JSON.stringify({
    endpoint,
    status: res.status,
    billed: res.status === 200 || res.status === 201,
    timestamp: new Date().toISOString(),
  }))

  return res
}

Checkliste

Verwenden Sie diese Checkliste vor dem Live-Gang:

  • API-Schlüssel in einer Umgebungsvariable gespeichert, nicht im Quellcode
  • Separate Schlüssel für Entwicklung und Produktion
  • HTTP-Statuscodes bei jeder Antwort geprüft
  • Wiederholungslogik mit exponentiellem Backoff für 500-Fehler
  • Keine Wiederholungen bei 402 ohne vorherige Aufladung
  • Ratenlimit-Behandlung implementiert
  • Guthabensaldo überwacht und Benachrichtigungen konfiguriert
  • Automatische Aufladung aktiviert (oder manueller Aufladeprozess definiert)
  • Alle API-Aufrufe über das eigene Backend geleitet

Siehe auch: Fehlerbehandlung für eine vollständige Liste der Statuscodes und Glossar für Begriffsdefinitionen.

Auf dieser Seite