Skip to content
Snippets Groups Projects
Commit a3254b58 authored by Markus Flögel's avatar Markus Flögel Committed by Marco Holz
Browse files

Dokumentation RateLimit-Headers

parent 0a38f776
No related branches found
No related tags found
1 merge request!83Dokumentation RateLimit-Headers
# Rate Limiting
FIT-Connect setzt sich aus mehreren Diensten zusammen. Für einige dieser Dienste ist der Durchsatz für Anfragen begrenzt, um abhängige Dienste nicht zu überlasten. Um dies zu realisieren wird in diesen Fällen ein Rate-Limiting angewandt, d.h. eine Begrenzung der Zahl der Anfragen an den Dienst in einem bestimmten Zeitintervall. Die genauen Begrenzungen werden je Dienst festgelegt.
## Ratelimit-Headers
Ist für einen Dienst das Rate Limiting eingerichtet, wird der Dienst in jeder Antwortnachricht entsprechende HTTP-Header senden. Die HTTP-Header folgen dem IETF-Draft [RateLimit Fields for HTTP](https://datatracker.ietf.org/doc/html/draft-ietf-httpapi-ratelimit-headers).
### RateLimit-Limit
Dieser Header gibt die aktuelle Begrenzung der Anfragen im momentanen Zeitfenster an. Falls mehrere Beschränkungen definiert sind, z.B. eine Beschränkung der Anfragen pro Sekunde und eine Beschränkung der Anfragen pro Minute, wird hier die Anzahl der zuerst eintretenden Beschränkung angegeben.
### RateLimit-Remaining
Dieser Header gibt die Anzahl der aktuell verfügbaren Anfragen im aktuellen Zeitfenster und der aktuell wirkenden Beschränkung zurück.
### RateLimit-Reset
Dieser Header gibt die Zeit in Sekunden an, wann das aktuelle Zeitfenster abläuft. Danach beginnt ein neues Zeitfenster für die aktuell wirkende Beschränkung.
## Überschreiten des Limits
Wird eine Anfrage-Begrenzung überschritten, wird diese mit dem HTTP-Status-Code `429` beantwortet und kein Inhalt vom Dienst zurückgegeben. Die Anfrage sollte dann, unter Berücksichtigung des Headers `RateLimit-Reset` wiederholt werden.
## Beispiel
Beispiel für die in der HTTP-Response enthaltenen HTTP-Header:
```yaml
RateLimit-Limit: 20 # Begrenzung auf 20 Anfragen im aktuellen Zeitfenster
RateLimit-Remaining: 3 # Es sind noch 3 Anfragen im aktuellen Zeitfenster möglich
RateLimit-Reset: 14 # In 14 Sekunden wird das aktuelle Zeitfenster ablaufen und ein neues beginnen.
```
......@@ -25,6 +25,8 @@ Das Ergebnis der Anfrage enthält daher neben der eigentlichen (Teil-)Ergebnisme
Die zurückgegebene Teilergebnismenge ist standardmäßig auf 100 Einträge limitiert und kann über den GET-Parameter `limit` auf maximal 500 Einträge erweitert werden.
Über den GET-Paramter `offset` können weitere Teilmengen der Ergebnismenge ermittelt werden.
Der Endpunkt [/routes](../../apis/routing-api.mdx#get-/routes) ist auf die Anzahl von Anfragen in Zeitfenstern beschränkt. Es kann also vorkommen, das der Dienst einen `HTTP-Status-Code` `429` zurückliefert. Um diese Beschränkung auswerten zu können liefert der Endpunkt entspechende [RateLimit-Headers](../rate-limiting.md) bei jeder Antwork zurück.
Beispiele für das Ermitteln der benötigten Daten:
<Tabs
......@@ -191,6 +193,8 @@ Die zurückgegebene Teilergebnismenge ist standardmäßig auf 100 Einträge limi
Die `id` eines Gebietes aus der Ergebnismenge kann im Endpunkt [/routes](../../apis/routing-api.mdx#get-/routes) als Identifikator (`areaId`) eines verwaltungspolitischen Gebietes verwendet werden.
Der Endpunkt [/areas](../../apis/routing-api.mdx#get-/areas) ist auf die Anzahl von Anfragen in Zeitfenstern beschränkt. Es kann also vorkommen, das der Dienst einen `HTTP-Status-Code` `429` zurückliefert. Um diese Beschränkung auswerten zu können liefert der Endpunkt entspechende [RateLimit-Headers](../rate-limiting.md) bei jeder Antwork zurück.
Beispiele für die Suche:
......
......@@ -28,6 +28,7 @@ module.exports = {
items: [
'getting-started/overview',
'getting-started/authentication',
'getting-started/rate-limiting',
'getting-started/submission-structure',
'getting-started/metadata',
'getting-started/encryption',
......@@ -51,7 +52,7 @@ module.exports = {
dirName: 'getting-started/receiving',
},
],
},
}
],
},
// {
......
# Rate Limiting
FIT-Connect setzt sich aus mehreren Diensten zusammen. Für einige dieser Dienste ist der Durchsatz für Anfragen begrenzt, um abhängige Dienste nicht zu überlasten. Um dies zu realisieren wird in diesen Fällen ein Rate-Limiting angewandt, d.h. eine Begrenzung der Zahl der Anfragen an den Dienst in einem bestimmten Zeitintervall. Die genauen Begrenzungen werden je Dienst festgelegt.
## Ratelimit-Headers
Ist für einen Dienst das Rate Limiting eingerichtet, wird der Dienst in jeder Antwortnachricht entsprechende HTTP-Header senden. Die HTTP-Header folgen dem IETF-Draft [RateLimit Fields for HTTP](https://datatracker.ietf.org/doc/html/draft-ietf-httpapi-ratelimit-headers).
### RateLimit-Limit
Dieser Header gibt die aktuelle Begrenzung der Anfragen im momentanen Zeitfenster an. Falls mehrere Beschränkungen definiert sind, z.B. eine Beschränkung der Anfragen pro Sekunde und eine Beschränkung der Anfragen pro Minute, wird hier die Anzahl der zuerst eintretenden Beschränkung angegeben.
### RateLimit-Remaining
Dieser Header gibt die Anzahl der aktuell verfügbaren Anfragen im aktuellen Zeitfenster und der aktuell wirkenden Beschränkung zurück.
### RateLimit-Reset
Dieser Header gibt die Zeit in Sekunden an, wann das aktuelle Zeitfenster abläuft. Danach beginnt ein neues Zeitfenster für die aktuell wirkende Beschränkung.
## Überschreiten des Limits
Wird eine Anfrage-Begrenzung überschritten, wird diese mit dem HTTP-Status-Code `429` beantwortet und kein Inhalt vom Dienst zurückgegeben. Die Anfrage sollte dann, unter Berücksichtigung des Headers `RateLimit-Reset` wiederholt werden.
## Beispiel
Beispiel für die in der HTTP-Response enthaltenen HTTP-Header:
```yaml
RateLimit-Limit: 20 # Begrenzung auf 20 Anfragen im aktuellen Zeitfenster
RateLimit-Remaining: 3 # Es sind noch 3 Anfragen im aktuellen Zeitfenster möglich
RateLimit-Reset: 14 # In 14 Sekunden wird das aktuelle Zeitfenster ablaufen und ein neues beginnen.
```
......@@ -25,6 +25,8 @@ Das Ergebnis der Anfrage enthält daher neben der eigentlichen (Teil-)Ergebnisme
Die zurückgegebene Teilergebnismenge ist standardmäßig auf 100 Einträge limitiert und kann über den GET-Parameter `limit` auf maximal 500 Einträge erweitert werden.
Über den GET-Paramter `offset` können weitere Teilmengen der Ergebnismenge ermittelt werden.
Der Endpunkt [/routes](../../apis/routing-api.mdx#get-/routes) ist auf die Anzahl von Anfragen in Zeitfenstern beschränkt. Es kann also vorkommen, das der Dienst einen `HTTP-Status-Code` `429` zurückliefert. Um diese Beschränkung auswerten zu können liefert der Endpunkt entspechende [RateLimit-Headers](../rate-limiting.md) bei jeder Antwork zurück.
Beispiele für das Ermitteln der benötigten Daten:
<Tabs
......@@ -191,6 +193,8 @@ Die zurückgegebene Teilergebnismenge ist standardmäßig auf 100 Einträge limi
Die `id` eines Gebietes aus der Ergebnismenge kann im Endpunkt [/routes](../../apis/routing-api.mdx#get-/routes) als Identifikator (`areaId`) eines verwaltungspolitischen Gebietes verwendet werden.
Der Endpunkt [/areas](../../apis/routing-api.mdx#get-/areas) ist auf die Anzahl von Anfragen in Zeitfenstern beschränkt. Es kann also vorkommen, das der Dienst einen `HTTP-Status-Code` `429` zurückliefert. Um diese Beschränkung auswerten zu können liefert der Endpunkt entspechende [RateLimit-Headers](../rate-limiting.md) bei jeder Antwork zurück.
Beispiele für die Suche:
......
......@@ -28,6 +28,7 @@ module.exports = {
items: [
'getting-started/overview',
'getting-started/authentication',
'getting-started/rate-limiting',
'getting-started/submission-structure',
'getting-started/metadata',
'getting-started/encryption',
......@@ -51,7 +52,7 @@ module.exports = {
dirName: 'getting-started/receiving',
},
],
},
}
],
},
// {
......
......@@ -36,6 +36,10 @@
"type": "doc",
"id": "version-FIT-Connect_v1/getting-started/authentication"
},
{
"type": "doc",
"id": "version-FIT-Connect_v1/getting-started/rate-limiting"
},
{
"type": "doc",
"id": "version-FIT-Connect_v1/getting-started/submission-structure"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment