Home Blog Rate Limiting API Endpoints
Back to Blog
Backend

Rate Limiting API Endpoints

acretph_manny
Jhon Manny Loto
Backend Specialist
September 7, 2026
Blog Image

Basically, if you run an API, you need rate limiting. It protects your servers, keeps costs down, and ensures the app stays fast for everyone. Just pick a method that fits your needs, be clear with your users about the rules, and keep an eye on things as you grow.

Introduction

Most apps today use APIs to share data and connect services. But if you don't control the traffic coming in, your system can get slow, expensive, or even crash. Rate limiting is a simple way to set boundaries on how many requests a user can make in a certain amount of time. This guide covers why you need it, which methods work best, and how to set it up for your own endpoints.

Why Rate Limiting Is Essential

Protecting System Resources

  • Stops your servers and network from getting overwhelmed
  • Prevents one broken service from taking down the whole app
  • Keeps the app fast for everyone

Controlling Costs

  • Cuts down on costs from data use or paid third party tools
  • Makes it easier to predict your monthly cloud bill

Mitigating Abuse

  • Blocks hackers from trying thousands of passwords at login
  • Stops bots from scraping your data or attacking your site

Ensuring Fair Access

  • Makes sure one power user doesn't slow things down for others
  • Helps you stick to the limits promised in your service terms

Core Concepts of Rate Limiting

Tokens and Time Windows

Limits are usually set as a specific number of requests over a set time, like 100 calls every minute. The system keeps track of how many times a user has called the API and blocks them if they go over that number.

Granularity

  • Global limits cover all the traffic hitting your entire API.
  • Endpoint limits focus on heavy tasks like exporting files or logging in.
  • User limits set different caps for individual accounts or keys.
  • IP limits help manage traffic from users who aren't logged in.

Enforcement Actions

  • Reject the call and send back a 429 error code.
  • Delay the request for a moment before processing it.
  • Throttle the response by sending back less data than usual.

Common Rate Limiting Algorithms

Fixed Window Counter

  • This counts requests in set blocks of time, like every 60 seconds.
  • It is easy to code but can be glitchy right when the clock resets.

Sliding Window Log

  • This records the time of every single request and checks the last minute of activity.
  • It is very accurate but uses more memory and power.

Sliding Window Counter (Approximate)

  • This looks at two counters, one for now and one for the previous window.
  • It guesses the total count to save on resources while staying mostly accurate.

Token Bucket

  • Think of this as a jar of tokens that refills at a steady speed.
  • Users can use up tokens quickly for short bursts, but they can't exceed the refill rate for long.

Leaky Bucket

  • Requests go into a bucket that drips out at a constant pace.
  • This ensures the traffic leaving the bucket is always smooth and steady.

Designing Effective Rate Limits

Identify Critical Endpoints

  • Focus on endpoints that use a lot of database power or talk to other expensive services.

Choose Appropriate Quotas

  • Look at how people usually use your app to set limits that make sense.
  • You can give paying customers more room while still protecting the site from free tier overuse.

Implement Tiered Plans

  • Create levels like Free, Pro, and Business with their own caps.
  • This gives people an easy way to pay for more access if they need it.

Communicate Limits Clearly

  • Add headers to your responses so users know how many requests they have left.
  • Make sure your documentation explains these limits and the errors they cause.

Provide Safe Failure Modes

  • Use a standard 429 status and explain what happened in the error message.
  • Tell the user exactly when they can try again using a Retry After header.

Monitor and Adjust

  • Keep an eye on your traffic stats and how often people hit their limits.
  • Update your settings as your app grows or if you see new security threats.

Implementation Strategies

Middleware Approach

  • Add the limiting code right into your web framework as middleware.
  • This works great with popular tools like Express, Django, or ASP.NET Core.

API Gateway

  • Use a gateway like Kong or Amazon API Gateway to block traffic before it even touches your servers.
  • This puts your rules in one place instead of repeating them in every service.

Distributed Store

  • Use a shared database like Redis to track counts if you have multiple servers running.
  • Just make sure the counters update correctly so two people don't skip the limit at the same time.

Edge Caching

  • Take advantage of CDNs that have built in rate limiting at the edge.
  • This stops the traffic before it ever reaches your actual hardware.

Sample Code Snippet (Node.js with Express and Redis)

```javascript

const express = require('express');

const redis = require('redis');

const { promisify } = require('util');

const app = express();

const client = redis.createClient();

const incrAsync = promisify(client.incr).bind(client);

const ttlAsync = promisify(client.ttl).bind(client);

const WINDOW_SECONDS = 60;

const MAX_REQUESTS = 100;

async function rateLimiter(req, res, next) {

const apiKey = req.header('x-api-key') || req.ip;

const key = `rl:${apiKey}`;

const current = await incrAsync(key);

if (current === 1) {

client.expire(key, WINDOW_SECONDS);

}

const ttl = await ttlAsync(key);

if (current > MAX_REQUESTS) {

res.set('Retry-After', ttl);

return res.status(429).json({

error: 'Rate limit exceeded',

limit: MAX_REQUESTS,

remaining: 0,

reset: ttl

});

}

res.set('X-RateLimit-Limit', MAX_REQUESTS);

res.set('X-RateLimit-Remaining', MAX_REQUESTS - current);

res.set('X-RateLimit-Reset', ttl);

next();

}

app.use(rateLimiter);

app.get('/data', (req, res) => {

res.json({ message: 'Success' });

});

app.listen(3000, () => console.log('API listening on port 3000'));

```

This example shows how to use Redis to track requests, send the right headers, and give a clear error when someone goes over the limit.

Testing Rate Limiting

  • Use tools like k6 or JMeter to send a lot of traffic and see if your limits hold up.
  • Check that the limits work the same across all your different servers.
  • Double check that the wait times you send back to users are correct.

Best Practices Checklist

  • Set limits for the whole site and for specific heavy tasks.
  • Use a fast tool like Redis to keep track of counts.
  • Always send 429 errors and tell users when to come back.
  • Be clear about your rules in your developer guides.
  • Watch your usage and change the caps if things aren't working.
  • Make it easy for users to upgrade if they hit their limits often.

Conclusion

Basically, if you run an API, you need rate limiting. It protects your servers, keeps costs down, and ensures the app stays fast for everyone. Just pick a method that fits your needs, be clear with your users about the rules, and keep an eye on things as you grow.

Tags:
Backend
acretph_manny
Jhon Manny Loto
Backend Specialist
My identity has been shaped in the countryside part of the Philippines! To travel around the world is something I wish of. In spite of the continual struggle, faith and courage were my main motivation to keep going because I believe no matter how you feel, just get up, dress up, show up and never give up. Great things are yet to come. Becoming part of Acret-PH is a great opportunity for me to nurture my knowledge and skills. I started with a zero-knowledge in Drupal, yet it was never a hindrance for me to cope up and learn since my seniors and fellow workmates have been very helpful.

Table of Contents

AcretPhilippines Inc.
Bringing Japanese software development excellence to the Philippine market since 2019.

Acret Philippines Inc.

14th Floor Latitude Corporate Center

Cebu Business Park

Lahug, Cebu City

TEL: 032-344-3847

09:00 AM - 06:00 PM (PHT)

Head Office Acret Inc.

〒650-0011

601 Kenso Building, 2-13-3 Shimoyamate-dori

Chuo-ku Kobe-shi, Hyogo, Japan

TEL:+81 78-599-8511

10:00-17:00 JPT

© 2025 Acret Philippines Inc. All rights reserved.