Files
quoter/docs/api-reference.md

204 lines
4.6 KiB
Markdown
Raw Normal View History

2025-08-02 00:18:09 +03:00
# API Reference
## Обзор
Quoter предоставляет REST API для загрузки файлов, управления квотами и получения файлов с автоматической генерацией миниатюр.
## Базовый URL
```
http://localhost:8080
```
## Аутентификация
Все API endpoints (кроме получения файлов) требуют аутентификации через заголовок `Authorization`:
```
Authorization: Bearer <your-jwt-token>
```
## Endpoints
### 1. Проверка состояния сервера
#### GET /
Проверяет работоспособность сервера.
**Ответ:**
```
200 OK
ok
```
### 2. Загрузка файлов
#### POST /
Загружает файл в S3 хранилище.
**Заголовки:**
```
Authorization: Bearer <token>
Content-Type: multipart/form-data
```
**Параметры:**
- `file` - файл для загрузки
**Ответ:**
```
200 OK
filename.ext
```
**Ошибки:**
2025-09-01 20:36:15 +03:00
- `400 Bad Request` - нет файлов или все файлы пустые
- `401 Unauthorized` - неверный или отсутствующий токен
- `413 Payload Too Large` - превышена квота пользователя или лимит размера файла
2025-08-02 00:18:09 +03:00
- `415 Unsupported Media Type` - неподдерживаемый тип файла
2025-09-01 20:36:15 +03:00
- `500 Internal Server Error` - ошибка загрузки в S3 или обновления квоты
2025-08-02 00:18:09 +03:00
2025-09-01 20:36:15 +03:00
### 3. Получение информации о текущем пользователе
#### GET /
Получает информацию о залогиненном пользователе с данными о квоте.
**Заголовки:**
```
Authorization: Bearer <token>
```
**Ответ:**
```json
{
"user_id": "user123",
"username": "john_doe",
"token_type": "session",
"created_at": "1642248600",
"last_activity": "1642335000",
"auth_data": "{\"roles\": [\"user\"]}",
"device_info": "{\"platform\": \"web\"}",
"quota": {
"current_quota": 1073741824,
"max_quota": 5368709120,
"usage_percentage": 20.0
}
}
```
**Ошибки:**
- `401 Unauthorized` - неверный или отсутствующий токен
### 4. Получение файлов
2025-08-02 00:18:09 +03:00
#### GET /{filename}
Получает файл по имени.
**Примеры:**
```
GET /image.jpg
GET /image_300.jpg
GET /image_300.jpg/webp
```
2025-09-01 20:36:15 +03:00
### 5. Управление квотами
2025-08-02 00:18:09 +03:00
#### GET /quota
Получает информацию о квоте пользователя.
**Параметры запроса:**
- `user_id` - ID пользователя
**Пример:**
```
GET /quota?user_id=user123
```
**Ответ:**
```json
{
"user_id": "user123",
"current_quota": 1073741824,
"max_quota": 5368709120
}
```
#### POST /quota/increase
Увеличивает квоту пользователя.
**Тело запроса:**
```json
{
"user_id": "user123",
"additional_bytes": 1073741824
}
```
**Ответ:**
```json
{
"user_id": "user123",
"current_quota": 2147483648,
"max_quota": 5368709120
}
```
#### POST /quota/set
Устанавливает квоту пользователя.
**Тело запроса:**
```json
{
"user_id": "user123",
"new_quota_bytes": 2147483648
}
```
**Ответ:**
```json
{
"user_id": "user123",
"current_quota": 2147483648,
"max_quota": 5368709120
}
```
## Коды ошибок
| Код | Описание |
|-----|----------|
| 200 | Успешный запрос |
2025-09-01 20:36:15 +03:00
| 400 | Неверные параметры запроса или нет файлов |
2025-08-02 00:18:09 +03:00
| 401 | Неавторизованный доступ |
| 404 | Файл не найден |
2025-09-01 20:36:15 +03:00
| 413 | Превышена квота пользователя или лимит размера файла (500 МБ) |
2025-08-02 00:18:09 +03:00
| 415 | Неподдерживаемый тип файла |
| 500 | Внутренняя ошибка сервера |
## Примеры использования
### Загрузка изображения
```bash
curl -X POST http://localhost:8080/ \
-H "Authorization: Bearer your-token" \
-F "file=@image.jpg"
```
2025-09-01 20:36:15 +03:00
### Получение информации о пользователе
```bash
curl -H "Authorization: Bearer your-token" \
http://localhost:8080/
```
2025-08-02 00:18:09 +03:00
### Получение миниатюры
```bash
curl http://localhost:8080/image_300.jpg
```
### Увеличение квоты
```bash
curl -X POST http://localhost:8080/quota/increase \
-H "Authorization: Bearer your-token" \
-H "Content-Type: application/json" \
-d '{"user_id": "user123", "additional_bytes": 1073741824}'
```