Рецепты API и CLI для Корзины
Готовые к копированию примеры для каждого эндпоинта Корзины. В каждом
разделе приведён вызов cURL и эквивалентная команда CLI.
О URL в примерах: все примеры используют
http://localhost:5770.
Замените адрес, если ваш инстанс Mockarty работает на другом хосте. См.
Советы и полезные функции.
Связанные страницы: Корзина · Руководство по
CLI · Справочник API
Аутентификация
Все эндпоинты требуют API-токен в заголовке X-API-Key. Токены
выпускаются в Настройки → API-токены (или POST /api/v1/auth/tokens) с
ролью, привязанной к пространству имён.
export MOCKARTY_URL=http://localhost:5770
export MOCKARTY_API_TOKEN=mk_7_...
export MOCKARTY_NAMESPACE=default
Работа из кода
Корзина доступна по REST и из CLI. SDK для Go, Python и Java намеренно её не
оборачивают: они покрывают то, что нужно тесту или CI-задаче, а очистка корзины
namespace’а — операторское действие. Используйте curl (примеры ниже) или
mockarty-cli trash … из скрипта.
Карта эндпоинтов
| Метод | Путь | Что делает |
|---|---|---|
| GET | /api/v1/namespaces/:ns/trash |
Список мягко удалённых элементов пространства. |
| GET | /api/v1/admin/trash |
Список мягко удалённых элементов по всей платформе. |
| GET | /api/v1/namespaces/:ns/trash/summary |
Счётчики по типам сущностей (пространство). |
| GET | /api/v1/admin/trash/summary |
Счётчики по типам сущностей (платформа). |
| GET | /api/v1/namespaces/:ns/trash/settings |
Настройки ретеншна пространства. |
| PUT | /api/v1/namespaces/:ns/trash/settings |
Upsert настроек ретеншна пространства. |
| GET | /api/v1/admin/trash/settings/global |
Глобальные значения ретеншна. |
| PUT | /api/v1/admin/trash/settings/global |
Обновить глобальные значения. |
| POST | /api/v1/namespaces/:ns/trash/restore-cascade/:cg |
Восстановить одну каскадную группу (пространство). |
| POST | /api/v1/admin/trash/restore-cascade/:cg |
Восстановить одну каскадную группу (админ). |
| POST | /api/v1/namespaces/:ns/trash/restore |
Массовое восстановление (до 500 групп). |
| POST | /api/v1/admin/trash/restore |
Массовое восстановление (админ, вся платформа). |
| POST | /api/v1/namespaces/:ns/trash/purge |
Необратимая массовая очистка (пространство). |
| POST | /api/v1/admin/trash/purge |
Необратимая массовая очистка (админ). |
| POST | /api/v1/namespaces/:ns/trash/purge-all |
Необратимая полная очистка корзины (пространство). |
| POST | /api/v1/admin/trash/purge-all |
Необратимая полная очистка корзины (админ). |
| POST | /api/v1/admin/trash/purge-now |
Запустить планировщик ретеншна немедленно. |
Список мягко удалённых элементов
Фильтры: type=mock,store, q=substring, cascade=<id>,
closed_by=<email>, from=<RFC3339>, to=<RFC3339>, limit, offset.
cURL
curl -s -H "X-API-Key: $MOCKARTY_API_TOKEN" \
"$MOCKARTY_URL/api/v1/namespaces/$MOCKARTY_NAMESPACE/trash?type=mock,store&limit=50"
CLI
mockarty-cli trash list --type mock,store --limit 50
mockarty-cli trash list --admin # по всей платформе
Ответ:
{
"items": [
{
"id": "mock-abc",
"name": "users",
"namespace": "default",
"entity_type": "mock",
"closed_at": "2026-04-19T12:00:00Z",
"closed_by": "alice@example.com",
"cascade_group_id": "11111111-1111-4111-8111-111111111111",
"restore_available": true
}
],
"total": 1,
"limit": 50,
"offset": 0
}
total учитывает все подходящие элементы среди всех типов ресурсов.
Параметры offset и limit позволяют получить следующие страницы, включая
элементы после первых 500 записей одного типа.
Сводка (счётчики для бейджей)
cURL
curl -s -H "X-API-Key: $MOCKARTY_API_TOKEN" \
"$MOCKARTY_URL/api/v1/namespaces/$MOCKARTY_NAMESPACE/trash/summary"
CLI
mockarty-cli trash summary
mockarty-cli trash summary --admin
Настройки ретеншна
cURL
# Прочитать
curl -s -H "X-API-Key: $MOCKARTY_API_TOKEN" \
"$MOCKARTY_URL/api/v1/namespaces/$MOCKARTY_NAMESPACE/trash/settings"
# Upsert
curl -s -X PUT -H "Content-Type: application/json" -H "X-API-Key: $MOCKARTY_API_TOKEN" \
"$MOCKARTY_URL/api/v1/namespaces/$MOCKARTY_NAMESPACE/trash/settings" \
-d '{"retention_days": 14, "enabled": true}'
# Глобальные значения (только админ)
curl -s -X PUT -H "Content-Type: application/json" -H "X-API-Key: $MOCKARTY_API_TOKEN" \
"$MOCKARTY_URL/api/v1/admin/trash/settings/global" \
-d '{"retention_days": 30, "enabled": true}'
CLI
mockarty-cli trash settings get
mockarty-cli trash settings set --retention-days 14 --enabled
mockarty-cli trash settings set --global --retention-days 30 --enabled
Восстановить одну каскадную группу
cURL
curl -s -X POST -H "X-API-Key: $MOCKARTY_API_TOKEN" \
"$MOCKARTY_URL/api/v1/namespaces/$MOCKARTY_NAMESPACE/trash/restore-cascade/11111111-1111-4111-8111-111111111111"
CLI
mockarty-cli trash restore 11111111-1111-4111-8111-111111111111
Ответ (camelCase, формат одиночного восстановления):
{ "cascadeGroupId": "11111111-1111-4111-8111-111111111111", "restoredCount": 4 }
Восстановление затрагивает только записи, которые всё ещё принадлежат этой
каскадной группе. Если запись уже восстановили и удалили снова, повторный
запрос для прежней группы оставит новое удаление в Корзине. Для восстановления
используйте текущую запись Корзины.
Для восстановления удалённой задачи или доски задач её проект должен быть
активен. Если проект находится в корзине, сначала восстановите проект. Иначе
восстановление задачи или доски вернёт конфликт и оставит её в корзине.
Массовое восстановление
cURL
curl -s -X POST -H "Content-Type: application/json" -H "X-API-Key: $MOCKARTY_API_TOKEN" \
"$MOCKARTY_URL/api/v1/namespaces/$MOCKARTY_NAMESPACE/trash/restore" \
-d '{"cascade_group_ids": ["11111111-1111-4111-8111-111111111111", "22222222-2222-4222-8222-222222222222"], "reason": "откат"}'
CLI
mockarty-cli trash restore 11111111-1111-4111-8111-111111111111,22222222-2222-4222-8222-222222222222 --reason "откат"
Ответ (конверт 207):
{
"restored": [{ "cascade_group_id": "11111111-1111-4111-8111-111111111111", "entity_type": "mock", "restored_count": 4 }],
"failed": [{ "cascade_group_id": "22222222-2222-4222-8222-222222222222", "error": "parent container still deleted" }],
"not_found": []
}
У каждой группы с ошибкой есть поле error. Ожидаемые продуктовые отказы
содержат понятное сообщение и могут иметь стабильный код reason. При
внутреннем сбое хранилища возвращается recycle bin operation failed;
перед повтором проверьте состояние сервиса.
Массовая очистка (НЕОБРАТИМО)
Сервер требует точной фразы "I understand this is permanent" в поле
confirmation. SDK и CLI проверяют её локально, поэтому неверный
запрос до сервера не доходит.
cURL
curl -s -X POST -H "Content-Type: application/json" -H "X-API-Key: $MOCKARTY_API_TOKEN" \
"$MOCKARTY_URL/api/v1/namespaces/$MOCKARTY_NAMESPACE/trash/purge" \
-d '{
"cascade_group_ids": ["11111111-1111-4111-8111-111111111111"],
"confirmation": "I understand this is permanent",
"reason": "GDPR запрос"
}'
CLI
# интерактивно (запрашивает фразу)
mockarty-cli trash purge 11111111-1111-4111-8111-111111111111
# неинтерактивно
mockarty-cli trash purge 11111111-1111-4111-8111-111111111111 --yes --reason "GDPR запрос"
Ответ (конверт 207):
{
"purged": [{ "cascade_group_id": "11111111-1111-4111-8111-111111111111", "entity_type": "mock", "rows_deleted": 7 }],
"failed": [],
"not_found": []
}
При внутреннем сбое хранилища ошибка группы содержит общее сообщение
recycle bin operation failed. Группа остаётся в корзине.
Полная очистка корзины (НЕОБРАТИМО)
purge-all навсегда удаляет все мягко удалённые элементы в области
видимости. В отличие от purge, список id не нужен — сервер сам
находит все закрытые cascade-группы и удаляет их пакетами, пока корзина
не опустеет, поэтому команда масштабируется на корзины с десятками тысяч
элементов. Требует ту же подтверждающую фразу, что и purge.
cURL
curl -s -X POST -H "X-API-Key: $MOCKARTY_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"confirmation":"I understand this is permanent","reason":"очистка перед релизом"}' \
"$MOCKARTY_URL/api/v1/namespaces/team-orders/trash/purge-all"
CLI
mockarty-cli trash empty --namespace team-orders --yes --reason "очистка перед релизом"
Ответ:
{
"rows_deleted": 18342,
"groups_purged": 7561,
"groups_failed": 0,
"batches_run": 16,
"truncated": false
}
truncated: true означает, что корзина была настолько большой, что
сработал предохранительный лимит до полной очистки — запустите команду
ещё раз, чтобы завершить.
Если поиск или обработка группы завершаются ошибкой, first_error содержит
публичную причину; внутренний сбой хранилища обозначается
recycle bin operation failed.
Ручной тик ретеншна (только админ)
Синхронно запускает планировщик ретеншна по всем пространствам. Полезно
для тестов или чтобы удостовериться, что планировщик работает.
В кластере отправляйте запрос лидеру. Другой узел отвечает HTTP 503 с
code: "not_leader"; повторите запрос на лидере. Ручной и плановый тики
на одном узле выполняются последовательно.
cURL
curl -s -X POST -H "X-API-Key: $MOCKARTY_API_TOKEN" \
"$MOCKARTY_URL/api/v1/admin/trash/purge-now"
CLI
mockarty-cli trash purge-now
Ответ:
{ "status": "ok", "purged_total": 123, "namespaces_scanned": 4 }
Если чтение или очистка хотя бы одного ресурса завершились ошибкой, запрос
возвращает HTTP 500. Часть строк могла быть уже удалена: проверьте корзину и
повторите операцию после устранения ошибки. При достижении лимита времени
возвращается status: "partial" с числом уже удалённых строк.
Ошибочные ответы
| Статус | Значение |
|---|---|
| 400 | Ошибка валидации — не заполнено поле, некорректная дата RFC3339, неверная фраза подтверждения. |
| 401 | Отсутствующий / неверный API-токен. |
| 403 | Роль не допускает операцию (например, поддержка пытается выполнить очистку). |
| 404 | Каскадная группа / пространство не найдены. |
| 409 | Конфликт восстановления — активная строка с тем же бизнес-ключом уже существует. |
| 500 | Ошибка ручного тика хотя бы для одного ресурса; предыдущие удаления могли выполниться. |
| 503 | Корзина недоступна либо ручной тик попал на нелидирующий узел (code: "not_leader"). |
См. также
- Корзина — концептуальное руководство, UI и
матрица RBAC. - Руководство по CLI — полный справочник
mockarty-cli trash …. - Руководство по SDK — установка и общие идиомы
SDK.