Limitation de débit des API

VérifiéSûr

Implémentez une limitation de débit sophistiquée avec fenêtres glissantes, seaux de jetons et quotas. Utilisez pour protéger les API des requêtes excessives.

Spar Skills Guide Bot
SecuriteIntermédiaire
27/07/2026
Claude CodeCodex
#rate-limiting#api-security#redis#middleware#quotas

Recommandé pour

Synthèse automatique

Implémente un limitation de débit d'API multi-algorithmes (fenêtre glissante, token bucket, compteur à fenêtre fixe) avec état distribué dans Redis, quotas par palier et en-têtes de réponse normalisés.

Points forts

  • Couvre trois algorithmes et indique comment choisir selon le profil de trafic (rafales, précision à la seconde, quota simple)
  • Inclut les en-têtes normalisés X-RateLimit-* et RateLimit-Policy ainsi que la réponse 429 avec Retry-After
  • Prévoit des quotas par palier (Free/Pro/Enterprise), des dépassements de burst et un contournement pour les appels internes service-à-service
  • Décrit des tests vérifiant les seuils exacts, les compteurs restants et la réinitialisation en fin de fenêtre

Limites

  • Suppose une instance Redis 6+ et des bibliothèques tierces (rate-limiter-flexible, slowapi, Bucket4j) non fournies par le skill
  • Le comportement en cas de panne Redis est laissé à l'appréciation (fail open ou fail closed) sans recommandation tranchée
  • Les exemples de code produits sont orientés Node.js/JavaScript, les autres écosystèmes restent à adapter
Quand l'utiliser

À utiliser lorsqu'une API publique ou multi-consommateurs doit être protégée contre les pics de requêtes avec des quotas différenciés par client.

Quand l'éviter

À éviter si l'application est mono-instance sans Redis ni besoin de quotas par consommateur, où un middleware de limitation simple suffit.

Analyse de sécurité

Sûr
Score qualité86/100

This is a well-scoped instructional skill about implementing API rate limiting. It uses only Read/Write/Edit/Grep/Glob plus a narrowly permissioned Bash pattern (api:ratelimit-*), and contains no destructive commands, no curl|sh, no secret exfiltration, no obfuscated payloads, and no attempts to disable safety controls. Recommended practices (Redis atomic ops, fail-open/closed guidance, mTLS bypass validation) are standard and legitimate.

Aucun point d'attention détecté

Comment cette analyse est faite

Exemples

Add rate limiting to an API
Add rate limiting to our Express API: 100 req/min for free plan users and 1000 req/min for pro users, keyed by API key, backed by Redis.
Choose an algorithm per endpoint
Our /search endpoint gets bursty traffic and /reports is expensive. Recommend a rate limiting algorithm for each and implement the middleware.
Standard rate limit headers and 429
Add X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset and RateLimit-Policy headers to every response, and return a 429 with Retry-After and a JSON body when a client exceeds its limit.

name: rate-limiting-apis description: | Implement sophisticated rate limiting with sliding windows, token buckets, and quotas. Use when protecting APIs from excessive requests. Trigger with phrases like "add rate limiting", "limit API requests", or "implement rate limits".

allowed-tools: Read, Write, Edit, Grep, Glob, Bash(api:ratelimit-*) version: 1.0.0 author: Jeremy Longshore jeremy@intentsolutions.io license: MIT compatible-with: claude-code, codex, openclaw

Rate Limiting APIs

Overview

Implement sophisticated rate limiting using sliding window, token bucket, and fixed window counter algorithms with Redis-backed distributed state. Configure per-endpoint, per-user, and per-API-key limits with tiered quotas, burst allowances, and standard response headers that communicate limit status to API consumers.

Prerequisites

  • Redis 6+ for distributed rate limit state (required for multi-instance deployments)
  • Rate limiting library: rate-limiter-flexible (Node.js), slowapi (Python/FastAPI), or Bucket4j (Java)
  • API key or user identification mechanism for per-consumer tracking
  • Monitoring for rate limit hit rates and rejected request metrics
  • Documentation system for publishing rate limit policies to API consumers

Instructions

  1. Analyze endpoint traffic patterns using Read and Grep on access logs or metrics to determine appropriate rate limits per endpoint category (read-heavy, write-heavy, resource-intensive).
  2. Select the rate limiting algorithm per endpoint: token bucket for bursty traffic allowance, sliding window log for precise per-second limits, or fixed window counter for simple quota enforcement.
  3. Implement rate limiting middleware that extracts the client identifier (API key from header, user ID from JWT, or IP address as fallback) and checks against the configured limit.
  4. Configure tiered rate limits per API consumer plan: Free (100 req/min), Pro (1000 req/min), Enterprise (10000 req/min) with per-endpoint overrides for expensive operations.
  5. Add burst allowance using token bucket: allow 2x the sustained rate for 10 seconds to handle legitimate traffic spikes without penalizing well-behaved clients.
  6. Set standard rate limit response headers on every response: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset (Unix timestamp), and RateLimit-Policy (draft IETF standard).
  7. Return 429 Too Many Requests with Retry-After header (seconds until next allowed request) and a JSON body explaining the limit, current usage, and reset time.
  8. Implement rate limit bypass for internal service-to-service calls using shared secret or mutual TLS identification to prevent internal traffic from consuming consumer quotas.
  9. Write tests that verify rate limits engage at exact thresholds, headers reflect correct remaining counts, and limits reset at the configured window boundary.

See ${CLAUDE_SKILL_DIR}/references/implementation.md for the full implementation guide.

Output

  • ${CLAUDE_SKILL_DIR}/src/middleware/rate-limiter.js - Rate limiting middleware with algorithm selection
  • ${CLAUDE_SKILL_DIR}/src/config/rate-limits.js - Per-endpoint and per-tier rate limit configuration
  • ${CLAUDE_SKILL_DIR}/src/utils/rate-limit-store.js - Redis-backed distributed counter implementation
  • ${CLAUDE_SKILL_DIR}/src/middleware/rate-limit-headers.js - Standard rate limit response header injection
  • ${CLAUDE_SKILL_DIR}/tests/rate-limiting/ - Rate limit threshold verification tests
  • ${CLAUDE_SKILL_DIR}/docs/rate-limits.md - Consumer-facing rate limit documentation

Error Handling

| Error | Cause | Solution | |-------|-------|----------| | 429 Too Many Requests | Client exceeded configured rate limit for the endpoint | Return Retry-After header with seconds until reset; include limit details in JSON body | | Redis connection failure | Rate limit state store unavailable | Fail open (allow requests) or fail closed (reject all) based on security posture; alert immediately | | Clock skew between instances | Distributed rate limit windows misaligned across servers | Use Redis server time (TIME command) as canonical clock; avoid relying on application server clocks | | Inconsistent counts | Race condition in read-check-increment cycle | Use Redis MULTI/EXEC transaction or Lua script for atomic increment-and-check operations | | Bypass abuse | Internal bypass mechanism exploited by external client | Validate bypass credentials per-request; restrict bypass to specific IP ranges or mTLS certificates |

Refer to ${CLAUDE_SKILL_DIR}/references/errors.md for comprehensive error patterns.

Examples

Sliding window with Redis: Implement a sliding window rate limiter using Redis sorted sets, where each request adds a timestamped entry and the window count is computed by ZRANGEBYSCORE over the last 60 seconds.

Tiered SaaS quotas: Free tier gets 100 requests/minute with no burst, Pro tier gets 1000 requests/minute with 2x burst for 10 seconds, Enterprise tier gets 10000 requests/minute with custom per-endpoint overrides.

Login endpoint protection: Apply strict rate limit of 5 attempts per minute per IP on /auth/login to prevent brute force attacks, with progressive lockout (15 min, 1 hour, 24 hours) after repeated violations.

See ${CLAUDE_SKILL_DIR}/references/examples.md for additional examples.

Resources

  • IETF RateLimit header fields draft: https://datatracker.ietf.org/doc/draft-ietf-httpapi-ratelimit-headers/
  • Token bucket algorithm explained
  • rate-limiter-flexible library: https://github.com/animir/node-rate-limiter-flexible
  • Redis rate limiting patterns with Lua scripts

Du fichier au premier essai

Le téléchargement contient exactement le contenu affiché sur cette fiche. Cette copie peut différer de la dernière version du dépôt source.

Consulter la source et ses fichiers annexes

Ce téléchargement contient uniquement SKILL.md. Les scripts, références, modèles et dépendances éventuels ne sont pas inclus. Récupérez les fichiers nécessaires depuis la source en conservant leur arborescence avant de poursuivre.

1. Télécharger le fichier

Télécharger SKILL.md

Depuis la racine d’un projet de test, enregistrez le fichier sous .skill-downloads/rate-limiting-apis-ms2s7d3w/SKILL.md, ou utilisez la commande suivante. Ce dossier sert à examiner la skill avant son installation.

Commande pour macOS/Linux ou WSL : un shell POSIX et curl sont nécessaires. Sous Windows sans WSL, utilisez le bouton de téléchargement et créez le dossier manuellement.

mkdir -p '.skill-downloads/rate-limiting-apis-ms2s7d3w' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/rate-limiting-apis-ms2s7d3w/download' --output '.skill-downloads/rate-limiting-apis-ms2s7d3w/SKILL.md.part' && mv '.skill-downloads/rate-limiting-apis-ms2s7d3w/SKILL.md.part' '.skill-downloads/rate-limiting-apis-ms2s7d3w/SKILL.md'

2. Vérifier les prérequis

Lisez SKILL.md avant de l’utiliser. Si le fichier cite des scripts ou services externes, examinez-les et préparez les accès nécessaires dans votre environnement de test.

Outils déclarés par l’auteur (à vérifier dans votre agent) : Read, Write, Edit, Grep, Glob, Bash(api:ratelimit-*)

Extrait original : Prerequisites
  • Redis 6+ for distributed rate limit state (required for multi-instance deployments)
  • Rate limiting library: rate-limiter-flexible (Node.js), slowapi (Python/FastAPI), or Bucket4j (Java)
  • API key or user identification mechanism for per-consumer tracking
  • Monitoring for rate limit hit rates and rejected request metrics
  • Documentation system for publishing rate limit policies to API consumers

Les plateformes de la fiche sont des indications du catalogue. Les chemins ci-dessous suivent la documentation des outils ; ils ne prouvent pas que cette skill y a été exécutée. Aucune version minimale de ces outils n’est attestée pour cette fiche.

3. Charger la skill

Après vérification, copiez le dossier complet dans le projet avec l’une des commandes ci-dessous, puis ouvrez une nouvelle session de l’outil. La commande s’arrête si un dossier du même nom existe déjà : comparez les fichiers avant de le remplacer.

Claude Code
test -f '.skill-downloads/rate-limiting-apis-ms2s7d3w/SKILL.md' && test -s '.skill-downloads/rate-limiting-apis-ms2s7d3w/SKILL.md' && mkdir -p '.claude/skills' && test ! -e '.claude/skills/rate-limiting-apis' && cp -R '.skill-downloads/rate-limiting-apis-ms2s7d3w' '.claude/skills/rate-limiting-apis'

Codex
test -f '.skill-downloads/rate-limiting-apis-ms2s7d3w/SKILL.md' && test -s '.skill-downloads/rate-limiting-apis-ms2s7d3w/SKILL.md' && mkdir -p '.agents/skills' && test ! -e '.agents/skills/rate-limiting-apis' && cp -R '.skill-downloads/rate-limiting-apis-ms2s7d3w' '.agents/skills/rate-limiting-apis'

OpenSkills

OpenSkills doit déjà être installé. La procédure locale install/read est contrôlée avec OpenSkills 1.5.0, qui exige Node.js ≥ 20.6.0. Aucun slug du catalogue n’est résolu automatiquement.

Installation officielle d’OpenSkills
openskills install './.skill-downloads/rate-limiting-apis-ms2s7d3w'

openskills read 'rate-limiting-apis-ms2s7d3w'

La lecture doit afficher le contenu du fichier installé et son dossier de base. Elle ne lance ni la skill ni ses dépendances.

Pour un agent qui lit AGENTS.md, synchronisez ensuite l’index. Cette commande modifie AGENTS.md : relisez le diff avant de l’utiliser.

openskills sync

Mode manuel ou autre outil : joignez SKILL.md à une conversation, ou ouvrez-le dans un agent capable de lire les fichiers. Ajoutez les ressources annexes nécessaires. Il n’existe pas de dossier universel reconnu par tous les outils.

4. Faire un premier essai

Utilisez une entrée courte et fictive : un endpoint d’API, un petit document ou un brief d’interface. Dans une nouvelle conversation, joignez le fichier ou donnez son chemin à l’agent, puis adaptez cette demande :

Lis .skill-downloads/rate-limiting-apis-ms2s7d3w/SKILL.md et applique ses instructions à cet exemple : [décrire une entrée de test]. Indique les fichiers, dépendances ou accès qui manquent. Produis le résultat demandé par la skill sans inventer de données ni exécuter de script non examiné.

Résultat attendu : une sortie correspondant aux instructions de la skill, ou une liste précise des prérequis manquants. Une simple confirmation de lecture ne valide pas le premier usage. Si une ressource externe est indisponible, ce parcours reste à tester.

Skills similaires