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.
| Umgebung | Empfohlene Kategorie |
|---|---|
| Lokale Entwicklung | development |
| CI / Staging | development |
| Produktion | production |
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 APIEingaben 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.
| Metrik | Warum es wichtig ist |
|---|---|
remaining | Warnt Sie, bevor Credits aufgebraucht sind |
subscription.percent_used | Verfolgt 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
402ohne 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.