Maak een uitgebreide documentatie over API-snelheidsbeperking voor mijn ontwikkelingsteam
description
Door het maken van uitgebreide documentatie krijgt mijn team een duidelijk begrip van de snelheidsbeperkingsstrategie, wat helpt bij het behouden van consistentie, het verbeteren van samenwerking en het verminderen van fouten tijdens de implementatie.
prompt
try_prompt
Help me bij het opstellen van een gedetailleerde documentatie voor mijn API-snelheidsbeperkingsstrategie die gedeeld kan worden met mijn ontwikkelingsteam. Mijn API-type is {{api_type}}. Voeg secties toe over het doel van snelheidsbeperking, de gebruikte algo ... more
generate_helper
...
tags
ai_answers
provider: openai
model: gpt-4.1-nano
Uiteraard! Hier is een gestructureerde outline voor de documentatie van je API-snelheidsbeperkingsstrategie, specifiek voor een REST API. Deze outline bevat alle gevraagde secties en biedt een overzichtelijke structuur voor je ontwikkelingsteam.
---
# Documentatie: API Snelheidsbeperkingsstrategie
## 1. Inleiding
- **Doel van de documentatie**
Uitleg over waarom snelheidsbeperking noodzakelijk is, bijvoorbeeld ter bescherming tegen misbruik, om servicekwaliteit te waarborgen, en om resourcegebruik te beheren.
- **Scope**
Beschrijving van de API's waarop deze strategie van toepassing is.
## 2. Doel van snelheidsbeperking
- Beperken van het aantal verzoeken per gebruiker/IP
- Voorkomen van overbelasting van servers
- Bevorderen van eerlijke toegang voor alle gebruikers
- Beschermen tegen DDoS-aanvallen
- Verbeteren van de algehele API-prestatie en betrouwbaarheid
## 3. Gebruikte algoritmen
### 3.1 Token Bucket
- **Werking:**
Verzoeken worden toegestaan zolang er tokens beschikbaar zijn. Tokens worden periodiek bijgevuld tot een maximale capaciteit.
- **Voordelen:**
Flexibel, laat korte burst-verzoeken toe.
- **Implementatievoorbeeld:**
(Details en pseudo-code)
### 3.2 Leaky Bucket
- **Werking:**
Verzoeken worden in een vaste snelheid verwerkt; excess-verzoeken worden in de wachtrij geplaatst of geweigerd.
- **Voordelen:**
Constante doorvoer, eenvoudig te implementeren.
- **Implementatievoorbeeld:**
(Details en pseudo-code)
## 4. Implementatierichtlijnen
### 4.1 Identificatie van gebruikers
- Gebruik van API-sleutels, tokens, IP-adressen of gebruikersaccounts
- Hoe te kiezen voor verschillende niveaus van snelheidslimieten
### 4.2 Configuratie van limieten
- Basis limieten (bijvoorbeeld: 1000 verzoeken per uur per API-sleutel)
- Aanpasbare limieten voor verschillende gebruikersgroepen
- Overriding en uitzonderingen
### 4.3 Technische implementatie
- Middleware-integratie (bijvoorbeeld in Express.js, Django, etc.)
- Caching en opslag van quota-status (bijvoorbeeld Redis)
- Response headers voor informatieve feedback (bijv. `X-RateLimit-Limit`, `X-RateLimit-Remaining`, `Retry-After`)
### 4.4 Foutafhandeling
- Wat te doen wanneer limieten worden overschreden
- Returncodes (bijvoorbeeld 429 Too Many Requests)
- Herstellingsmechanismen en retries
## 5. Voorbeelden van scenario's
### 5.1 Normale gebruikssituatie
- Gebruiker maakt verzoeken binnen de limiet
- Ontvangt correcte responses en updates over quota
### 5.2 Burst-verzoek
- Gebruiker maakt een korte burst van verzoeken
- Hoe de token bucket dit toestaat tot de bucket leeg is
### 5.3 Overschrijding van limieten
- Gebruiker overschrijdt de limiet
- API retourneert 429 status en `Retry-After` header
### 5.4 Herstel na limiet
- Hoe gebruikers weer toegang krijgen na het overschrijden van limieten
- Reset-tijd en quota-herstel
## 6. Overwegingen en best practices
- **Consistentie:** Gebruik uniforme limieten en response headers
- **Flexibiliteit:** Mogelijkheid voor dynamische aanpassing van limieten
- **Transparantie:** Informeer gebruikers via headers over hun quota
- **Scalability:** Opslag en controle van quota moeten schaalbaar zijn
- **Security:** Beveilig identificatiemethoden (API-sleutels, tokens)
- **Testing:** Regelmatig testen van snelheidslimieten en gedrag
- **Logging & Monitoring:** Houd gebruik en overschrijdingen bij voor analyse
## 7. Bijlagen
- Pseudo-code en voorbeeldimplementaties
- Referenties naar algoritmen en best practices
- Documentatie links voor gebruikte technologieën
---
Mocht je verdere details of uitwerkingen wensen, dan help ik je daar graag mee!
provider: deepseek
model: deepseek-chat
Zeker, hier is een gedetailleerde, gestructureerde outline voor je API-snelheidsbeperkingsdocumentatie in het Nederlands.
---
### **Documentatie: API Snelheidsbeperkingsstrategie (REST API)**
**Document Doel:** Dit document beschrijft de strategie, implementatie en best practices voor snelheidsbeperking (Rate Limiting) van onze REST API. Het is bedoeld om een consistente en effectieve aanpak te garanderen binnen het ontwikkelingsteam.
**Doelgroep:** Ontwikkelaars, Architecten en DevOps Engineers.
---
### **Inhoudsopgave**
1. **Inleiding & Doelstellingen**
* Wat is API Snelheidsbeperking?
* Belangrijkste doelstellingen van ons beleid.
* Scope (welke endpoints, omgevingen).
2. **Gekozen Snelheidsbeperkingsalgoritmen**
* Token Bucket Algoritme (Primaire keuze).
* Sliding Window Log Algoritme (Alternatief voor geavanceerde scenario's).
* Vergelijking en reden voor keuze.
3. **Implementatierichtlijnen**
* Aanbevolen plaatsing in de architectuur.
* Headers voor communicatie met clients.
* Foutafhandeling en HTTP-statuscodes.
* Configuratie- en beheerbaarheid.
4. **Veelvoorkomende Scenario's & Configuratievoorbeelden**
* Scenario's voor verschillende gebruikersrollen en endpoints.
* Voorbeeldconfiguraties.
5. **Belangrijkste Overwegingen & Best Practices**
* Richtlijnen voor het hele team.
6. **Monitoring, Logging & Alerting**
* Wat te monitoren.
* Welke gegevens te loggen.
---
### **1. Inleiding & Doelstellingen**
**Wat is API Snelheidsbeperking?**
API-snelheidsbeperking is een techniek om het aantal verzoeken dat een client naar onze API kan sturen binnen een bepaalde tijdseenheid te controleren en te beperken.
**Belangrijkste Doelstellingen:**
* **Bescherming tegen Misbruik & DDoS-aanvallen:** Voorkomen dat kwaadwillende actors of foutieve clients onze services overbelasten.
* **Garanderen van Beschikbaarheid & Stabiliteit:** Zorgen voor een consistente performance voor alle gebruikers door overbelasting van de infrastructuur te voorkomen.
* **Eerlijke Resourceverdeling:** Zorgen dat één gebruiker of client niet alle resources monopoliseert ten koste van anderen.
* **Kostenbeheersing:** Controleren van de operationele kosten door onverwachte pieken in API-gebruik te beheren.
* **API-Governance & Businessmodellen:** Mogelijkheid bieden voor toekomstige gefaseerde abonnementsmodellen (bijv. Free, Pro, Enterprise).
**Scope:** Dit beleid is van toepassing op alle publieke endpoints van onze REST API in zowel de staging- als productieomgevingen.
### **2. Gekozen Snelheidsbeperkingsalgoritmen**
We hanteren primair het **Token Bucket** algoritme vanwege zijn eenvoud, efficiëntie en voorspelbaarheid. Voor complexere use-cases kan het **Sliding Window Log** algoritme worden overwogen.
**A. Token Bucket (Aanbevolen)**
* **Werking:** Elke client heeft een "bucket" die gevuld is met een maximaal aantal "tokens". Elk API-verzoek verbruikt één token. Tokens worden met een vaste snelheid (bijv. 10 tokens per minuut) weer aangevuld.
* **Voordelen:**
* Eenvoudig te begrijpen en implementeren.
* Staat korte "bursts" van verkeer toe (tot de grootte van de bucket).
* Zeer efficiënt in geheugen- en rekengebruik.
* **Nadelen:**
* Minder nauwkeurig over de exacte tijdsintervalgrenzen heen vergeleken met een sliding window.
**B. Sliding Window Log (Alternatief)**
* **Werking:** Houdt een tijdstempel bij voor elk verzoek van een client. Het aantal verzoeken in het afgelopen tijdvenster (bijv. het afgelopen uur) wordt geteld.
* **Voordelen:**
* Zeer nauwkeurig; voorkomt dat de limiet aan het begin/einde van een venster wordt overschreden.
* **Nadelen:**
* Verbruikt meer geheugen omdat tijdstempels moeten worden opgeslagen.
* Kan rekenintensiever zijn bij een hoog volume.
**Keuze:** We starten met **Token Bucket** voor alle algemene limieten. Gebruik **Sliding Window** alleen voor specifieke, kritieke endpoints waar absolute nauwkeurigheid vereist is.
### **3. Implementatierichtlijnen**
**A. Architectuur & Plaatsing**
* Implementeer snelheidsbeperking in de **API Gateway** (bijv. Kong, AWS API Gateway, Azure API Management) of een dedicated **reverse proxy** (bijv. Nginx, Traefik). Dit is efficiënter dan het in de applicatielogica zelf te bouwen.
* Als applicatielogica nodig is, gebruik dan een gecentraliseerde cache zoals **Redis** voor het bijhouden van de staat. Dit is essentieel voor een stateless en schaalbare applicatie.
**B. Clientcommunicatie via HTTP-Headers**
Informeer de client altijd over hun limietstatus via response headers:
* `X-RateLimit-Limit`: Het maximum aantal verzoeken in het tijdvenster.
* `X-RateLimit-Remaining`: Het aantal resterende verzoeken in het huidige venster.
* `X-RateLimit-Reset`: De tijd (Unix timestamp) wanneer het limietvenster opnieuw wordt ingesteld.
**C. Foutafhandeling**
* **HTTP Status Code:** Wanneer een limiet wordt overschreden, retourneer **HTTP 429 Too Many Requests**.
* **Response Body:** Geef een duidelijke foutmelding in JSON-formaat.
```json
{
"error": {
"code": 429,
"message": "Snelheidslimiet overschreden. Probeer het over 45 seconden opnieuw.",
"retryAfter": 45
}
}
```
* **Retry-After Header:** Inclusief een `Retry-After` header die aangeeft hoeveel seconden de client moet wachten voordat een nieuw verzoek wordt gedaan.
**D. Configuratie**
* Sla limietconfiguraties (sleutels, buckets, aanvulsnelheden) op in de omgevingsvariabelen of een configuratiebeheerservice. Dit maakt aanpassingen zonder herimplementatie mogelijk.
### **4. Veelvoorkomende Scenario's & Configuratievoorbeelden**
| Scenario | Limiet Sleutel | Configuratie (Token Bucket) | Doel |
| :--- | :--- | :--- | :--- |
| **Globale, Anonieme Limiet** | Client IP-adres | 100 requests per minuut (Bucket: 100, Aanvulsnelheid: 100/min) | Basisbescherming tegen scraping en misbruik. |
| **Geverifieerde Gebruiker** | Gebruikers-ID (JWT `sub` claim) | 1000 requests per uur (Bucket: 1000, Aanvulsnelheid: 1000/uur) | Eerlijk gebruik voor ingelogde gebruikers. |
| **Specifiek Endpoint (bijv. Login)** | Client IP-adres | 5 requests per minuut (Bucket: 5, Aanvulsnelheid: 5/min) | Bruteforce-aanvallen op inlogpagina's voorkomen. |
| **API Sleutel (voor Partners)** | API Key | 10.000 requests per dag (Bucket: 10.000, Aanvulsnelheid: 10.000/dag) | Gebruik door integratiepartners beheren. |
### **5. Belangrijkste Overwegingen & Best Practices**
1. **Wees Contextbewust:** Stel limieten in op basis van context: IP, Gebruiker, API-sleutel, of een combinatie. Een geverifieerde gebruiker moet een hogere limiet hebben dan een anonieme bezoeker.
2. **Differentieer per Endpoint:** "Zware" endpoints (bijv. zoekopdrachten, rapportages) moeten strengere limieten hebben dan "lichte" endpoints (bijv. health checks).
3. **Stel Realistische Limieten In:** Test de limieten om ervoor te zorgen dat ze legitiem gebruik niet hinderen. Begin conservatief en pas aan op basis van monitoring.
4. **Plan voor Schaalbaarheid:** De gekozen opslag voor limietstatistieken (bijv. Redis) moet de verwachte belasting aankunnen en gedistribueerd kunnen werken.
5. **Documenteer Openlijk:** De snelheidslimieten en het bijbehorende gedrag moeten duidelijk worden gedocumenteerd in onze publieke API-documentatie.
6. **Houd het Eenvoudig:** Begin met een eenvoudig beleid. Voeg complexiteit (zoals dynamische limieten) alleen toe als het absoluut noodzakelijk is.
7. **Gebruik Caching:** Combineer snelheidsbeperking met caching strategieën om de belasting van backend-services verder te verminderen.
### **6. Monitoring, Logging & Alerting**
* **Monitoring:**
* Houd het aantal **429-responses** per endpoint/client bij.
* Monitor het gebruik (% van limiet) voor belangrijke clients.
* Meet de latentie van de snelheidsbeperkingslaag zelf.
* **Logging:**
* Log alle **429-fouten**, inclusief client-ID, endpoint, tijdstip en `Retry-After` waarde.
* **Alerting:**
* Stel alerts in voor een plotselinge, significante toename van **429-fouten**, wat kan wijzen op een misconfiguratie of een aanval.
* Waarschuw wanneer een belangrijke client (bijv. een partner) consequent >90% van hun limiet bereikt.
---
**Dit document is een levend document en zal worden bijgewerkt naarmate onze API en vereisten evolueren.**

