🌐 Web Development: React, Next.js, PWAs & E-commerce solutions📱 Mobile Apps: React Native & Flutter for iOS/Android💻 Desktop Apps: Cross-platform Electron applications🍽️ RestaurantPOS Pro: Complete restaurant management system🛍️ RetailPOS Elite: Smart retail point of sale solution📋 WaitlistPro: Smart waitlist management platform🛠️ Developer Tools: Powerful SDKs, APIs & libraries for seamless integration🎯 Code Playground: Live JavaScript, Python & Java execution📚 Programming Academy: Interactive quizzes for 17+ languages⚙️ Backend & APIs: RESTful, GraphQL & microservices architecture🚀 DevOps: CI/CD pipelines, Docker, Kubernetes & cloud deployment🔧 App Management: Performance monitoring, security updates & maintenance🌐 Web Development: React, Next.js, PWAs & E-commerce solutions📱 Mobile Apps: React Native & Flutter for iOS/Android💻 Desktop Apps: Cross-platform Electron applications🍽️ RestaurantPOS Pro: Complete restaurant management system🛍️ RetailPOS Elite: Smart retail point of sale solution📋 WaitlistPro: Smart waitlist management platform🛠️ Developer Tools: Powerful SDKs, APIs & libraries for seamless integration🎯 Code Playground: Live JavaScript, Python & Java execution📚 Programming Academy: Interactive quizzes for 17+ languages⚙️ Backend & APIs: RESTful, GraphQL & microservices architecture🚀 DevOps: CI/CD pipelines, Docker, Kubernetes & cloud deployment🔧 App Management: Performance monitoring, security updates & maintenance
Back to Documentation

API Rate Limiter

Advanced rate limiting with multiple strategies

Installation

npm install @jutech-devs/api-rate-limiter

Quick Start

import { useRateLimiter } from '@jutech-devs/api-rate-limiter';

function APIComponent() {
  const { makeRequest, state, canMakeRequest } = useRateLimiter({
    maxRequests: 10,
    windowMs: 60000, // 1 minute
    strategy: 'sliding-window'
  });

  const fetchData = async () => {
    try {
      const result = await makeRequest(() => 
        fetch('/api/data').then(res => res.json())
      );
      console.log('Data:', result);
    } catch (error) {
      console.error('Rate limited:', error.message);
    }
  };

  return (
    <div>
      <p>Remaining requests: {state.remaining}</p>
      <button onClick={fetchData} disabled={!canMakeRequest()}>
        Fetch Data
      </button>
    </div>
  );
}

Rate Limiting Strategies

Sliding Window

Most accurate but uses more memory. Maintains a rolling window of requests.

strategy: 'sliding-window'

Fixed Window

Memory efficient but can allow bursts. Resets counter at fixed intervals.

strategy: 'fixed-window'

Token Bucket

Allows burst requests up to bucket capacity. Smooth rate limiting.

strategy: 'token-bucket'

Advanced Usage

Automatic Retry

import { useRateLimitedAPI } from '@jutech-devs/api-rate-limiter';

function APIComponent() {
  const { makeAPIRequest, state } = useRateLimitedAPI({
    maxRequests: 10,
    windowMs: 60000
  });

  const fetchWithRetry = async () => {
    try {
      const result = await makeAPIRequest(
        () => fetch('/api/data').then(res => res.json()),
        {
          maxRetries: 3,
          retryDelay: 1000,
          exponentialBackoff: true
        }
      );
      console.log('Success:', result);
    } catch (error) {
      console.error('Failed after retries:', error);
    }
  };

  return (
    <div>
      <button onClick={fetchWithRetry}>Fetch with Auto-Retry</button>
      <p>Status: {state.isLimited ? 'Rate Limited' : 'Available'}</p>
    </div>
  );
}

Batch Processing

import { useBatchRateLimiter } from '@jutech-devs/api-rate-limiter';

function BatchProcessor() {
  const { addToQueue, state, queueLength } = useBatchRateLimiter({
    maxRequests: 5,
    windowMs: 10000
  });

  const processBatch = async () => {
    const requests = [
      () => fetch('/api/item/1').then(res => res.json()),
      () => fetch('/api/item/2').then(res => res.json()),
      () => fetch('/api/item/3').then(res => res.json()),
    ];

    const results = await Promise.all(
      requests.map(req => addToQueue(req))
    );
    
    console.log('Batch results:', results);
  };

  return (
    <div>
      <button onClick={processBatch}>Process Batch</button>
      <p>Queue length: {queueLength}</p>
      <p>Remaining: {state.remaining}</p>
    </div>
  );
}

Multiple API Rate Limiters

import { useMultiRateLimiter } from '@jutech-devs/api-rate-limiter';

function MultiAPIComponent() {
  const { makeRequest, getAllStates } = useMultiRateLimiter({
    github: { maxRequests: 60, windowMs: 3600000 },
    twitter: { maxRequests: 300, windowMs: 900000 },
    internal: { maxRequests: 1000, windowMs: 60000 }
  });

  const fetchGitHubData = () => 
    makeRequest('github', () => 
      fetch('/api/github/user').then(res => res.json())
    );

  const states = getAllStates();

  return (
    <div>
      <button onClick={fetchGitHubData}>
        GitHub API (Remaining: {states.github?.remaining})
      </button>
    </div>
  );
}

Configuration Options

OptionTypeDefaultDescription
maxRequestsnumberrequiredMaximum requests per window
windowMsnumberrequiredTime window in milliseconds
strategystring'sliding-window'Rate limiting strategy
retryAfternumberundefinedDefault retry delay

Available Hooks

useRateLimiter

Basic rate limiting hook with full control

useRateLimitedAPI

API requests with automatic retry logic

useBatchRateLimiter

Queue and process requests in batches

useMultiRateLimiter

Manage multiple rate limiters for different APIs

Use Cases

API Integration - Respect third-party limits
User Actions - Prevent spam clicking
Background Jobs - Throttle processes
Resource Protection - Protect your APIs

Pricing

Free & Open Source

  • • All rate limiting strategies
  • • React hooks included
  • • TypeScript support
  • • MIT License
  • • Community support