mirror of
https://github.com/cadmium-im/cadmium-docs-legacy.git
synced 2024-11-09 20:21:03 +00:00
Describe basic request ratelimit system
This commit is contained in:
parent
0688f8849d
commit
78250add03
68
protocol-spec/basic-request-ratelimit.md
Normal file
68
protocol-spec/basic-request-ratelimit.md
Normal 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
|
||||||
|
}
|
||||||
|
```
|
Loading…
Reference in New Issue
Block a user