Communitygithub.com

Limitation de Débit

Bucket à jetons, fenêtre glissante, limites par utilisateur/IP, basé sur Redis, motifs Upstash.

Qu'est-ce que Limitation de Débit ?

Cette compétence implémente la limitation de débit (rate limiting) pour les API et les applications web, en utilisant des algorithmes éprouvés comme le bucket à jetons et la fenêtre glissante. Elle est conçue pour les déploiements multi-instances et serverless, en s'appuyant sur Redis ou Upstash pour le stockage distribué des compteurs, évitant ainsi les pertes d'état entre les invocations. La compétence fournit des règles claires pour identifier les appelants (clé API en priorité, IP en fallback) et retourner les en-têtes HTTP standardisés `429 Too Many Requests`, `Retry-After` et `X-RateLimit-Remaining`. Elle prend en charge Next.js, Express et les environnements serverless, avec des limites par défaut configurables (100 req/min pour l'API générale, 5 req/min pour l'authentification) et une séparation par niveau d'abonnement (gratuit, pro, entreprise). Elle recommande l'utilisation de `@upstash/ratelimit` pour la serverless et l'implémentation en middleware pour une application globale avec possibilité de surcharge par route.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/YepAPI/skills/tree/HEAD/skills/rate-limiting

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Que fait Limitation de Débit ?

Règles

  • Utiliser le bucket à jetons pour les points de terminaison d'API, la fenêtre glissante pour les routes d'authentification/connexion
  • Identifier les appelants d'abord par clé API, puis par IP en fallback — jamais uniquement par IP pour les routes authentifiées
  • Retourner 429 Too Many Requests avec l'en-tête Retry-After (secondes) et l'en-tête X-RateLimit-Remaining
  • Stocker les compteurs dans Redis (ou Upstash pour le serverless) — jamais en mémoire pour les déploiements multi-instances
  • Définir des valeurs par défaut raisonnables : 100 req/min pour l'API générale, 5 req/min pour l'authentification, 1000 req/min pour les lectures
  • Utiliser @upstash/ratelimit pour le serverless — il gère l'atomicité Redis et la fenêtre glissante nativement
  • Implémenter la limitation de débit en tant que middleware — appliquer globalement, remplacer par route avec des limites plus strictes
  • Pour Next.js : limiter le débit dans middleware.ts ou les gestionnaires de route d'API, pas dans les composants React
  • Séparer les limites par niveau : gratuit, pro, entreprise — stocker le niveau dans JWT ou via une recherche en base de données
  • Journaliser les hits de limitation de débit avec l'identité de l'appelant — détecter les schémas d'abus tôt

Modèles

// Modèle Upstash serverless
import { Ratelimit } from "@upstash/ratelimit";
import { Redis } from "@upstash/redis";

const ratelimit = new Ratelimit({
  redis: Redis.fromEnv(),
  limiter: Ratelimit.slidingWindow(10, "10 s"),
  analytics: true,
});

const { success, limit, remaining, reset } = await ratelimit.limit(identifier);

À Éviter

  • Limitation de débit en mémoire dans des configurations serverless ou multi-instances — l'état est perdu entre les invocations
  • Limiter le débit uniquement au niveau applicatif — ajouter aussi des limites CDN/Edge (Cloudflare, Vercel)
  • Bloquer les utilisateurs légitimes avec des limites trop agressives — commencer permissif, resserrer en fonction des données
  • Oublier de limiter le débit des webhooks et des soumissions de formulaires publics

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

YepAPI/skills

WCAG 2.1 AA — semantic HTML, keyboard navigation, screen readers.

YepAPI/skills

Experiment setup, variant splitting, statistical significance, and feature flag integration.

YepAPI/skills

CRUD generators, data tables, user management, role-based access, and bulk operations.

YepAPI/skills

Monitor what ChatGPT and Gemini say about your brand using YepAPI.

YepAPI/skills

Queue workers with BullMQ/Inngest/Trigger.dev, job retries, dead letter queues, concurrency.

YepAPI/skills

Commander.js, interactive prompts with Clack, spinners, colors, config files, exit codes, and npm publishing.

YepAPI/skills

cmdk integration, Cmd+K trigger, fuzzy search, grouped actions, keyboard navigation, and dynamic action registration.

YepAPI/skills

Content planning with trend and sentiment data from YepAPI.

YepAPI/skills

Content calendar, keyword-driven planning, and content briefs.

YepAPI/skills

Theme switching with CSS variables, system preference detection, next-themes, and persistence.

YepAPI/skills

Threaded comments, @mentions, reactions, moderation queue, optimistic UI, and cursor pagination.

YepAPI/skills

Competitive analysis between domains using YepAPI.

YepAPI/skills

Layout grids, KPI cards, data tables with sorting/filtering, sidebar navigation, and responsive breakpoints.

YepAPI/skills

Data encryption — TLS everywhere, AES-256-GCM for PII, bcrypt passwords, encrypted backups.

YepAPI/skills

Chart patterns with Recharts/Nivo/D3, responsive containers, color scales, and accessibility.

YepAPI/skills

Drizzle schema definition, push vs migrate, type-safe queries, relations, transactions, and prepared statements.

YepAPI/skills

Upload handling, resize/compress, CDN delivery, blur placeholders, and next/image patterns.

YepAPI/skills

Local business and Google Maps research using YepAPI.

YepAPI/skills

Cursor-based pagination, IntersectionObserver, virtualized lists with @tanstack/react-virtual, and scroll position restoration.

YepAPI/skills

Chat UI components, streaming responses with AI SDK, context window management, and RAG patterns.

Skills associés