🌐 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-limiterQuick 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
| Option | Type | Default | Description |
|---|---|---|---|
| maxRequests | number | required | Maximum requests per window |
| windowMs | number | required | Time window in milliseconds |
| strategy | string | 'sliding-window' | Rate limiting strategy |
| retryAfter | number | undefined | Default 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 APIsPricing
Free & Open Source
- • All rate limiting strategies
- • React hooks included
- • TypeScript support
- • MIT License
- • Community support