cadmium-docs-legacy/protocol-spec/basic-request-ratelimit.md

69 lines
1.2 KiB
Markdown
Raw Normal View History

# Basic request ratelimit system
## Introduction
This extension is intended to limit the number of requests from clients per unit of time. It is based on Protocol Errors extension.
## Message type identifiers
None.
## Use cases
- Client:
```json
{
"id": "abcd",
"type": "profile:register",
"to": "cadmium.org",
"payload": {
"username": "spam_spam_spam",
"thirdPIDs": [],
"password": "spam"
}
}
```
- Server:
```json
{
"id": "abcd",
"type": "profile:register",
"from": "cadmium.org",
"ok": false,
"payload": {
2020-07-16 08:04:56 +00:00
"errID": "ratelimit_exceed",
"errText": "Request ratelimit exceed! Please, try again later!",
"errPayload": {
2020-07-16 08:04:56 +00:00
"retryAfter": 1000
}
}
}
```
## Errors
### Global errors
- `ratelimit_exceed`
## Business Rules
- Server MUST count number of requests per unit of time and drop new requests after specified number of made requests with Protocol Error message.
- Number of requests and used unit of time SHOULD be configurable on server
## JSON Schema
### Error payload
```typescript
interface RatelimitExceedErrorPayload {
/**
2020-07-16 08:04:56 +00:00
* How long after the client can retry the request (in millis)
*/
retryAfter: number
}
```