🔑
Securing REST APIs

API Keys & Rate Limiting

Third-Party API Access Control
💡 API Key, EK "MEMBERSHIP CARD" hai, EK GYM (API) mein — HAR MEMBER (CLIENT APPLICATION), APNA KHUD KA CARD RAKHTA hai. Rate Limiting, GYM ka RULE hai — "EK DIN mein, SIRF 100 BAAR, EQUIPMENT USE kar sakte ho" — SERVER, OVERLOAD hone SE, BACHATA hai.

API Keys, TYPICALLY, THIRD-PARTY INTEGRATIONS/SERVICE-TO-SERVICE COMMUNICATION ke liye, USE HOTE hain (JWT ki TARAH, INDIVIDUAL USERS ke liye NAHI) — EK UNIQUE, LONG, RANDOM STRING, HAR CLIENT APPLICATION ko, ISSUE ki jaati hai, aur, HAR REQUEST mein, HEADER (jaise X-API-Key) mein, PASS ki jaati hai.

Rate Limiting, EK CLIENT ko, EK TIME WINDOW mein (jaise, 100 REQUESTS PER MINUTE), KITNI REQUESTS, KARNE DI JAAYE, YE CONTROL karta hai — SERVER ko, ABUSE/OVERLOAD SE, BACHATA hai. Bucket4j jaisi LIBRARIES, ISE, EASILY, IMPLEMENT karne DETI hain, TOKEN BUCKET ALGORITHM SE.

// API Key validation, filter mein:
@Component
public class ApiKeyFilter extends OncePerRequestFilter {
    protected void doFilterInternal(HttpServletRequest req, HttpServletResponse res, FilterChain chain)
            throws ServletException, IOException {
        String apiKey = req.getHeader("X-API-Key");
        if (apiKey == null || !apiKeyService.isValid(apiKey)) {
            res.setStatus(HttpStatus.UNAUTHORIZED.value());
            return;
        }
        chain.doFilter(req, res);
    }
}

// Rate limiting response header, COMMON convention:
// X-RateLimit-Limit: 100
// X-RateLimit-Remaining: 42
// X-RateLimit-Reset: 1699999999
// 429 Too Many Requests — LIMIT exceed hone par
🔑
API Key, EK "MEMBERSHIP CARD" hai, EK GYM (API) mein — HAR MEMBER (CLIENT APPLICATION), APNA KHUD KA CARD RAKHTA hai. Rate Limiting, GYM ka RULE hai — "EK DIN mein, SIRF 100 BAAR, EQUIPMENT USE kar sakte ho" — SERVER, OVERLOAD hone SE, BACHATA hai.
1 / 2
⚡ Quick Recap
  • API Keys = third-party/service-to-service authentication (individual users ke liye NAHI)
  • Rate limiting = server ko, abuse/overload se, protect karta hai
  • 429 Too Many Requests = rate limit exceed hone par, CORRECT status code
Is page mein (2 subtopics)

Fixed WINDOW (jaise, "100 requests, HAR, MINUTE ke, START mein, RESET"), SIMPLE hai, LEKIN, "BURST" ISSUES ho sakte hain (WINDOW BOUNDARY PAR, DOUBLE, LIMIT, EFFECTIVELY, USE ho sakta hai). Sliding WINDOW, ZYAADA, ACCURATE, LEKIN, ZYAADA, COMPLEX, IMPLEMENTATION MANGТА hai.

💡Tip: Bucket4j, DONO, ALGORITHMS (aur, TOKEN BUCKET) SUPPORT karta hai — MOST, PROJECTS ke liye, SIMPLE, TOKEN BUCKET, KAAFI hota hai.

Global, RATE LIMIT (POORE, SERVER ke liye), SERVER, OVERLOAD SE, BACHATA hai. Per-user, RATE LIMIT (HAR, API KEY/USER ke liye, SEPARATE), FAIR, USAGE, ENSURE karta hai — EK, ABUSIVE, USER, BAAKI, USERS ko, AFFECT NAHI karta.

  • Global limit = SERVER-WIDE, overload PROTECTION
  • Per-user limit = FAIR usage, EK, USER, DOOSRON ko, AFFECT NAHI karta