Skip to content

Обзор API

можно. предоставляет REST API для программного управления флагами, сегментами, окружениями и API-ключами. На этой странице — общие принципы: аутентификация, формат запросов, ошибки и версионирование.

Базовый URL

Все запросы к API выполняются относительно базового URL сервера:

http://localhost:8080/api/v1

В продакшене:

https://flags.example.com/api/v1

Аутентификация

можно. поддерживает два метода аутентификации через заголовок Authorization: Bearer:

JWT Bearer Token

Используется для доступа к веб-панели и управления ресурсами.

bash
curl -X POST "http://localhost:8080/api/v1/auth/login" \
  -H "Content-Type: application/json" \
  -d '{"email": "admin@example.com", "password": "your-password"}'

Ответ:

json
{
  "token": "eyJhbGciOiJIUzI1NiIs...",
  "refreshToken": "dGhpcyBpcyBhIHJlZnJlc2ggdG9rZW4...",
  "user": {
    "id": 1,
    "email": "admin@example.com",
    "name": "Admin",
    "role": "ADMIN",
    "status": "ACTIVE",
    "avatar": null,
    "locale": "ru",
    "createdAt": "2026-01-01T00:00:00Z",
    "lastActiveAt": "2026-06-21T10:00:00Z"
  }
}
ПараметрЗначение по умолчаниюОписание
Access token TTL15 минутНастраивается через JWT_ACCESS_TOKEN_TTL_MINUTES
Refresh token TTL30 днейНастраивается через JWT_REFRESH_TOKEN_TTL_DAYS
Refresh token rotationВключенаСемейная ротация: старый токен инвалидируется при обновлении

API Key

Используется SDK и для сервер-сервер взаимодействия. Привязан к конкретному окружению.

bash
curl "http://localhost:8080/api/client/features" \
  -H "Authorization: Bearer <your-api-key>"
ОсобенностьОписание
Формат64-символьная Base64url-encoded случайная строка (без префикса)
ТипыSERVER (чтение+запись) или FRONTEND (только чтение)
Привязка к окружениюОдин ключ = одно окружение
ОтзывМожно отозвать ключ в любой момент
РотацияСоздайте новый ключ, обновите приложения, отзовите старый

Предупреждение: Никогда не коммитьте API-ключи в репозиторий. Используйте переменные окружения или secrets manager.

Формат запросов и ответов

  • Content-Type: application/json
  • Accept: application/json

Успешный ответ (один объект)

json
{
  "id": 1,
  "key": "checkout_v2",
  "name": "Новый чекаут",
  "description": "Переработка оформления заказа",
  "flagType": "RELEASE",
  "enabled": true,
  "archived": false,
  "tags": ["checkout", "ui-redesign"],
  "createdAt": "2026-06-21T13:41:05Z"
}

Список (пагинация)

json
{
  "items": [...],
  "page": 0,
  "size": 20,
  "totalItems": 147,
  "totalPages": 8
}

Ошибка

json
{
  "error": "человекочитаемое сообщение",
  "code": "NOT_FOUND",
  "traceId": "abc123"
}
HTTP-кодКод ошибкиОписание
400BAD_REQUESTНеверные параметры запроса
400VALIDATION_ERRORОшибка валидации тела запроса
401UNAUTHORIZEDОтсутствует или недействителен токен/ключ
401INVALID_CREDENTIALSНеверный email или пароль
401TOKEN_REUSEОбнаружен повторно использованный refresh-токен
403FORBIDDENНедостаточно прав
404NOT_FOUNDРесурс не найден
409CONFLICTРесурс уже существует
405METHOD_NOT_ALLOWEDНеверный HTTP-метод
500INTERNAL_ERRORВнутренняя ошибка сервера

Пагинация

Коллекции поддерживают пагинацию:

bash
curl "http://localhost:8080/api/v1/flags?page=0&size=20" \
  -H "Authorization: Bearer $TOKEN"
ПараметрТипПо умолчаниюОписание
pageint0Номер страницы (0-based)
sizeint20Размер страницы (макс. 100)

Категории API

КатегорияБазовый путьИспользуется
Флаги/api/v1/flagsПанель, CI/CD
Сегменты/api/v1/segmentsПанель
Окружения/api/v1/environmentsПанель
Контексты/api/v1/contextsПанель
API-ключи/api/v1/api-keysПанель
Аудит/api/v1/auditПанель
Проекты/api/v1/projectsПанель
Пользователи/api/v1/usersПанель (Admin)
Настройки/api/v1/settingsПанель (Admin)
Интеграции/api/v1/integrationsПанель
Теги/api/v1/tagsПанель
Метрики/api/v1/metricsПанель
Аутентификация/api/v1/authЛогин, обновление, выход

SDK-эндпоинты

EndpointМетодАутентификацияОписание
/api/client/featuresGETAPI KeyПолучение всех флагов окружения (ETag)
/api/client/evaluatePOSTAPI KeyОценка флагов для переданного контекста
/api/client/metricsPOSTAPI KeyОтправка метрик использования

Swagger UI и OpenAPI

Интерактивная документация API:

http://localhost:8080/swagger-ui.html

OpenAPI 3.1 спецификация:

http://localhost:8080/v3/api-docs

Генерация клиентских библиотек:

bash
openapi-generator generate \
  -i http://localhost:8080/v3/api-docs \
  -g java \
  -o ./generated-client
ПеременнаяПо умолчанию
SPRINGDOC_SWAGGER_UI_PATH/swagger-ui.html
SPRINGDOC_API_DOCS_PATH/v3/api-docs

Примеры использования

Создание флага

bash
curl -X POST "http://localhost:8080/api/v1/flags" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "key": "checkout_v2",
    "name": "Новый чекаут",
    "description": "Переработка оформления заказа",
    "flagType": "RELEASE",
    "projectId": 1
  }'

Получение правил для SDK

bash
curl "http://localhost:8080/api/client/features" \
  -H "Authorization: Bearer <api-key>"

Архивирование флага

bash
curl -X POST "http://localhost:8080/api/v1/flags/42/archive" \
  -H "Authorization: Bearer $TOKEN"

Что дальше?

Released under the AGPL v3.0 License.