Добавил АПИ функцию которая возвращает информацию о версии сервера и о том что он работает
138 lines
5.3 KiB
Markdown
138 lines
5.3 KiB
Markdown
# API для разработчиков: Технические запросы
|
||
|
||
Этот файл описывает технические запросы, которые не требуют авторизации и нужны для служебной работы клиента с сервером.
|
||
|
||
Сейчас здесь два метода:
|
||
|
||
- `Ping` — keep-alive запрос для поддержания живого WebSocket-соединения;
|
||
- `GetServerInfo` — запрос базовой публичной информации о сервере для выбора узла в децентрализованной сети.
|
||
|
||
Логика раздела такая:
|
||
|
||
- `Ping` нужен для регулярной проверки, что соединение всё ещё живо;
|
||
- `GetServerInfo` нужен до авторизации и до работы с данными, чтобы клиент понял, что сервер доступен, и показал пользователю краткую карточку этого узла.
|
||
|
||
Ниже сначала описаны назначение методов, затем точные форматы запросов и ответов.
|
||
|
||
## 1. `Ping`
|
||
|
||
### Назначение
|
||
|
||
Служебный keep-alive запрос.
|
||
|
||
Клиент может отправлять его периодически, чтобы:
|
||
|
||
- поддерживать активное WebSocket-соединение;
|
||
- понимать, что сервер отвечает;
|
||
- при необходимости получать текущее серверное время.
|
||
|
||
### Запрос
|
||
|
||
```json
|
||
{
|
||
"op": "Ping",
|
||
"requestId": "ping-001",
|
||
"payload": {
|
||
"ts": 1774700000123
|
||
}
|
||
}
|
||
```
|
||
|
||
Поле `ts` в запросе необязательно для логики сервера. Сервер его не валидирует и не использует для принятия решения.
|
||
|
||
### Успешный ответ
|
||
|
||
```json
|
||
{
|
||
"op": "Ping",
|
||
"requestId": "ping-001",
|
||
"status": 200,
|
||
"ok": true,
|
||
"payload": {
|
||
"ts": 1774700000456
|
||
}
|
||
}
|
||
```
|
||
|
||
### Специфические коды ошибок `Ping`
|
||
|
||
- У `Ping` нет специальных прикладных ошибок.
|
||
- Если произойдёт непредвиденная проблема, сервер вернёт общую ошибку из раздела `00`, обычно `500 / INTERNAL_ERROR`.
|
||
|
||
---
|
||
|
||
## 2. `GetServerInfo`
|
||
|
||
### Назначение
|
||
|
||
Запрос публичной информации о сервере.
|
||
|
||
Он нужен клиенту для выбора сервера в децентрализованной сети. По этому запросу клиент может:
|
||
|
||
- проверить, что сервер вообще доступен;
|
||
- показать URL и версию сервера;
|
||
- показать физический регион или адрес размещения;
|
||
- показать описание сервера;
|
||
- показать поле `origin` как комментарий о природе этого узла;
|
||
- показать дополнительную текстовую информацию.
|
||
|
||
Этот запрос доступен без авторизации.
|
||
|
||
### Источник данных
|
||
|
||
- `version` берётся из Gradle build и подставляется в `application.properties`;
|
||
- остальные поля читаются из настроек сервера;
|
||
- если значение в конфиге не задано, сервер возвращает пустую строку.
|
||
|
||
### Запрос
|
||
|
||
```json
|
||
{
|
||
"op": "GetServerInfo",
|
||
"requestId": "srv-001",
|
||
"payload": {
|
||
}
|
||
}
|
||
```
|
||
|
||
### Успешный ответ
|
||
|
||
```json
|
||
{
|
||
"op": "GetServerInfo",
|
||
"requestId": "srv-001",
|
||
"status": 200,
|
||
"ok": true,
|
||
"payload": {
|
||
"url": "wss://node.example.org/ws",
|
||
"version": "1.0",
|
||
"physicalRegion": "Грузия, Тбилиси",
|
||
"description": "Public community SHiNE node",
|
||
"origin": "Community-operated node",
|
||
"extraInfo": "IPv4 + IPv6; test federation enabled"
|
||
}
|
||
}
|
||
```
|
||
|
||
### Поля ответа
|
||
|
||
- `url` — публичный URL сервера.
|
||
- `version` — версия сервера из Gradle build.
|
||
- `physicalRegion` — физический регион или адрес размещения сервера.
|
||
- `description` — человекочитаемое описание сервера.
|
||
- `origin` — комментарий о том, какой это сервер.
|
||
- `extraInfo` — любая дополнительная информация о сервере.
|
||
|
||
### Специфические коды ошибок `GetServerInfo`
|
||
|
||
- У `GetServerInfo` нет специальных прикладных ошибок при штатной работе.
|
||
- Если произойдёт непредвиденная проблема, сервер вернёт общую ошибку из раздела `00`, обычно `500 / INTERNAL_ERROR`.
|
||
|
||
---
|
||
|
||
## 3. Короткое резюме
|
||
|
||
- `Ping` нужен для keep-alive и проверки, что WebSocket-соединение живо.
|
||
- `GetServerInfo` нужен для выбора сервера в сети и показа публичной информации об узле.
|
||
- Оба запроса доступны без авторизации.
|