Describe basic request ratelimit system

This commit is contained in:
ChronosX88 2019-12-26 17:41:38 +04:00
parent 0688f8849d
commit 78250add03
Signed by: ChronosXYZ
GPG Key ID: 085A69A82C8C511A

View File

@ -0,0 +1,68 @@
# 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": {
"errCode": "ratelimit_exceed",
"errText": "Request ratelimit exceed! Please, try again later!",
"errPayload": {
"retryAfter": 2
}
}
}
```
## Error Identifiers
### Global error identifiers
- `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 {
/**
* How long after the client can retry the request (in seconds)
*/
retryAfter: number
}
```