Zurück zur Startseite

API-Schlüssel für Hobbyprojekte: HMAC und Cache

Die Plattform stellt kostenlose echte APIs für Hobbyprojekte mit Benutzerdaten bereit. Verwendet selbstversorgende Schlüssel mit HMAC, zweistufige Validierung und LRU-Cache zum Schutz vor Überlastung. Playground vereinfacht das Testen ohne Deployment.

Kostenlose API ohne Stubs: Schlüssel mit HMAC-Signatur
Advertisement 728x90

Kostenloses API für Eigenprojekte: Selbstständige Schlüssel und Rate Limiting

Entwickler zeigen oft Frontend-Apps in Vorstellungsgesprächen mit Daten aus localStorage oder jsonplaceholder. Das vereinfacht die Entwicklung ohne Serverkosten, führt aber zu statischen Daten und künstlichen Verzögerungen durch setTimeout. Eine bessere Alternative? Eine Plattform mit echten APIs, auf der du deine eigenen Daten hochladen kannst. Die Einrichtung dauert nur wenige Minuten – kein Backend erforderlich.

Die Architektur nutzt Next.js für die Web-Oberfläche mit SSG, Node.js/Express zur Benutzerverwaltung und Schlüsselvergabe sowie einen dedizierten API-Service. Alles läuft in Docker mit einem Nginx-Proxyservers.

Freier Zugang: Herausforderungen und die Lösung mit API-Schlüsseln

Ohne Grenzen könnte jeder beliebig viele Spam-Anfragen los schicken und schnell Ressourcen erschöpfen. Die zentrale Strategie? Minimale Datenbankabfragen und frühzeitige Filterung ungültiger Schlüssel bereits beim Parsen.

Google AdInline article slot

Die Schlüssel sind selbstständig: Sie haben das Format ppk_version_userId_nonce_signature. Die Authentifizierung erfolgt über: Authorization: PetProjects ppk_v1_1_nonce_signature.

Die Validierung geschieht in zwei Schritten:

  • Lokale Prüfung: Struktur und HMAC-Signatur werden ohne Datenbankzugriff überprüft.
  • Datenbankabfrage für die userId erst nach erfolgreicher Initialvalidierung.
function validateApiKey(apiKey: string): ApiKeyPayload | null {
    if (!apiKey.startsWith('ppk_')) return null;

    const parts = apiKey.split('_');
    if (parts.length !== 5) return null;

    const [, version, userIdRaw, nonce, signature] = parts;

    const userId = Number(userIdRaw);
    if (!Number.isInteger(userId)) return null;

    if (!signature || !/^[a-f0-9]{64}$/.test(signature)) return null;

    const payload = `${version}.${userId}.${nonce}`;

    const expectedSignature = crypto.createHmac('sha256', API_KEY_SECRET).update(payload).digest('hex');

    if (signature.length !== expectedSignature.length) return null;

    const isValid = crypto.timingSafeEqual(Buffer.from(signature, 'hex'), Buffer.from(expectedSignature, 'hex'));

    if (!isValid) return null;

    return { version, userId, nonce };
}

timingSafeEqual schützt vor Timing-Angriffen. Gültige Schlüssel werden in LRUCache gespeichert (max. 10.000 Einträge, TTL: 5 Minuten).

Google AdInline article slot

Caching und Leistungsausgleich

Caching reduziert Latenz und Datenbanklast. Die 5-Minuten-TTL ist ein Kompromiss: Bei einem Schlüssel-Leak bleibt er aktiv, bis Ablauf – danach muss er neu validiert werden.

Einschränkungen:

  • Keine sofortige Schlüsselwiderrufung.
  • Leaked Keys bleiben gültig, bis TTL abläuft.
  • Geheimnisse müssen geschützt werden.

Mögliche Verbesserungen: Blacklist-Unterstützung, Key-Versionierung und dynamische Widerrufung.

Google AdInline article slot

Interaktive Testumgebung für die API

Eine interaktive Oberfläche ermöglicht es dir, Anfragen direkt im Browser zu senden – mit automatisch ausgefüllten Schlüsseln. Außerdem generiert sie Codebeispiele für mehrere Sprachen.

Beispiel POST:

curl -L -X POST 'https://api.pet-projects.io/rest/free' \
-H 'Authorization: PetProjects ppk_v1_1_a1b2c3d4e5_a1b2c3d4e5f6g7h8i10j11' \
-H 'Content-Type: application/json' \
-d '{

— Editorial Team

Advertisement 728x90

Weiterlesen