API gratuit pour projets perso : clés autonomes et limitation de débit
Les développeurs ont souvent recours à des données statiques dans localStorage ou jsonplaceholder lorsqu'ils présentent leurs applications frontend en entretien. Cela simplifie le développement sans coûts serveur, mais entraîne des données figées et des délais artificiels via setTimeout. Une meilleure solution ? Une plateforme avec des APIs réelles où vous pouvez téléverser vos propres données. La configuration prend moins de cinq minutes — aucun backend requis.
L'architecture repose sur Next.js pour l'interface web (SSG), Node.js/Express pour la gestion des utilisateurs et des clés, et un service API dédié. Tout fonctionne sous Docker avec un proxy Nginx.
Défis d'accès gratuit et solution par clé API
Sans limites, n'importe qui pourrait inonder le système de requêtes spam, épuisant rapidement les ressources. La stratégie clé ? Minimiser les requêtes à la base de données et filtrer les clés invalides dès l'analyse.
Les clés sont autonomes, formatées ainsi : ppk_version_userId_nonce_signature. L'authentification s'effectue via : Authorization: PetProjects ppk_v1_1_nonce_signature.
La validation se fait en deux étapes :
- Vérification locale : structure et signature HMAC vérifiées sans accéder à la base de données.
- Recherche dans la base : uniquement après confirmation initiale de validité.
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 empêche les attaques par timing. Les clés valides sont mises en cache dans LRUCache (max : 10 000 entrées, TTL : 5 minutes).
Équilibre entre mise en cache et performance
La mise en cache réduit la latence et la charge sur la base de données. Le TTL de 5 minutes est un compromis : les clés exposées restent actives jusqu’à expiration, puis nécessitent une revalidation.
Limites :
- Aucune révocation instantanée de clé.
- Clés compromises restent valables jusqu’au terme du TTL.
- Les secrets doivent être protégés.
Améliorations possibles : liste noire, versioning des clés, révocation dynamique.
Espace de test interactif pour API
Une interface interactive permet d’envoyer des requêtes directement depuis le navigateur, avec les clés auto-remplies. Elle génère automatiquement des exemples de code pour plusieurs langages.
Exemple 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
Aucun commentaire pour le moment.