Rate limiters can be configured to ensure that some or all requestors can not overload the server by issuing requests too frequently.
## Example
The following JSON is an example for this standardized configuration component:
```json
```
## Definition
The rate limiter control consists of two sets of control:
- slots: define the numeric limits.
- elements: define the criteria to apply a rate limiter for.
```json
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://invantive.com/schemas/defs/RateLimitControl.schema.json",
"title": "RateLimitControl",
"description": "Specification of rate limit control.",
"type": "object",
"additionalProperties": false,
"properties": {
"RateLimitControlList": {
"type": ["array", "null"],
"items": {
"$ref": "./RateLimitControlElement.schema.json"
},
"description": "Ordered list of Rate Limit Controls. First one to apply is used."
},
"RateLimitControlSlotList": {
"type": ["array", "null"],
"items": {
"$ref": "./RateLimitControlSlot.schema.json"
},
"description": "Set of Rate Limit Control Slots."
}
}
}
```
## `RateLimitControlElement`
An element specifies the applicable rate limiters. Each rate limiter can refer to an existing slot with centralizes the actual limits.
```json
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://invantive.com/schemas/defs/RateLimitControlElement.schema.json",
"title": "RateLimitControlElement",
"type": "object",
"description": "Specification of a rate limit control element.",
"additionalProperties": false,
"properties": {
"Description": {
"type": ["string", "null"],
"description": "Optional description identifying the rate limit control element."
},
"Context": {
"type": ["string", "null"],
"description": "Optional context limiting the applicability of the rate limit control element. * at the end is a wildcard."
},
"Url": {
"type": ["string", "null"],
"description": "Optional URL. * at the end is a wildcard.",
"format": "uri"
},
"SlotName": {
"type": ["string", "null"],
"description": "Name of slot."
},
"ValidFromUtc": {
"type": ["string", "null"],
"format": "date-time",
"description": "Start of validity (UTC). Outside of this period the rate limit control element is not enforced."
},
"ValidToUtc": {
"type": ["string", "null"],
"format": "date-time",
"description": "End of validity (UTC). Outside of this period the rate limit control element is not enforced."
},
"LogOnCode": {
"type": ["string", "null"],
"description": "Log on code."
},
"DataContainerId": {
"type": ["string", "null"],
"description": "Data container ID."
},
"IpAddressClientCidr": {
"type": ["string", "null"],
"description": "IP address of the client device in CIDR notation (1.2.3.4/5)."
}
}
}
```
## `RateLimitControlSlot`
The slots are defined on a second, minute and hour time window. Each time window specifies:
- Maximum number of actions.
- Delay in milliseconds per request when limit is exceeded.
- Whether to fail when limit is exceeded.
```json
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://invantive.com/schemas/defs/RateLimitControlSlot.schema.json",
"title": "RateLimitControlSlot",
"type": "object",
"additionalProperties": false,
"properties": {
"Description": {
"type": ["string", "null"],
"description": "Optional description identifying the rate limit slot."
},
"Name": {
"type": ["string", "null"],
"description": "Name."
},
"ActionsPerSecond": {
"type": ["integer", "null"],
"description": "Maximum number of actions per second; reset on every second switch."
},
"ActionsPerMinute": {
"type": ["integer", "null"],
"description": "Maximum number of actions per minute; reset on every minute switch."
},
"ActionsPerHour": {
"type": ["integer", "null"],
"description": "Maximum number of actions per hour; reset on every hour switch."
},
"DelayMsOnOverflowSecond": {
"type": ["integer", "null"],
"description": "Number of milliseconds to delay an answer when the second level rate limited is exceeded."
},
"DelayMsOnOverflowMinute": {
"type": ["integer", "null"],
"description": "Number of milliseconds to delay an answer when the minute level rate limited is exceeded."
},
"DelayMsOnOverflowHour": {
"type": ["integer", "null"],
"description": "Number of milliseconds to delay an answer when the hour level rate limited is exceeded."
},
"FailOnOverflowSecond": {
"type": "boolean",
"description": "Whether to fail on an overflow on the second level rate limit.",
"default": true
},
"FailOnOverflowMinute": {
"type": "boolean",
"description": "Whether to fail on an overflow on the minute level rate limit.",
"default": true
},
"FailOnOverflowHour": {
"type": "boolean",
"description": "Whether to fail on an overflow on the hour level rate limit.",
"default": true
}
}
}
```