280 lines
12 KiB
Markdown
280 lines
12 KiB
Markdown
# Admin API
|
||
|
||
## 1. Назначение документа
|
||
|
||
Этот документ фиксирует целевые HTTP-контракты административного API, через которое UI управляет workspace, operations, agents, platform access и observability.
|
||
|
||
Для потоковой модели детальные HTTP DTO вынесены отдельно в:
|
||
|
||
- `docs/streaming-admin-api.md`
|
||
|
||
## 2. Общие правила API
|
||
|
||
- все payload по умолчанию в `JSON`;
|
||
- import/export конфигурации используют `YAML`;
|
||
- все основные ресурсы являются `workspace-scoped`;
|
||
- версии operation и agent адресуются явно;
|
||
- published operation и published agent - ссылки на конкретные version;
|
||
- ошибки валидации возвращаются отдельно от transport errors.
|
||
|
||
Базовый префикс:
|
||
|
||
```text
|
||
/api/admin
|
||
```
|
||
|
||
## 3. Основные ресурсы
|
||
|
||
- `workspaces`
|
||
- `auth`
|
||
- `memberships`
|
||
- `invitations`
|
||
- `operations`
|
||
- `secrets`
|
||
- `auth-profiles`
|
||
- `agents`
|
||
- `platform-api-keys`
|
||
- `logs`
|
||
- `usage`
|
||
- `samples`
|
||
- `descriptors`
|
||
- `config import/export`
|
||
|
||
## 4. Workspace-scoped routing
|
||
|
||
Канонический префикс для UI-driven сценариев:
|
||
|
||
```text
|
||
/api/admin/workspaces/{workspace_id}
|
||
```
|
||
|
||
## 5. Группы endpoints
|
||
|
||
### 5.1. Workspaces and members
|
||
|
||
- `GET /api/admin/workspaces`
|
||
- `POST /api/admin/workspaces`
|
||
- `GET /api/admin/workspaces/{workspace_id}`
|
||
- `PATCH /api/admin/workspaces/{workspace_id}`
|
||
- `DELETE /api/admin/workspaces/{workspace_id}`
|
||
- `GET /api/admin/workspaces/{workspace_id}/members`
|
||
- `PATCH /api/admin/workspaces/{workspace_id}/members/{user_id}`
|
||
- `DELETE /api/admin/workspaces/{workspace_id}/members/{user_id}`
|
||
- `GET /api/admin/workspaces/{workspace_id}/invitations`
|
||
- `POST /api/admin/workspaces/{workspace_id}/invitations`
|
||
- `DELETE /api/admin/workspaces/{workspace_id}/invitations/{invitation_id}`
|
||
- `GET /api/admin/workspaces/{workspace_id}/export`
|
||
|
||
Контракт:
|
||
|
||
- `POST /invitations` возвращает metadata invitation и одноразовый `invite_token`;
|
||
- `invite_token` доступен только в create-response и не возвращается повторно в list endpoints;
|
||
- `PATCH /members/{user_id}` меняет роль участника;
|
||
- `DELETE /members/{user_id}` удаляет участника из workspace;
|
||
- `GET /export` возвращает JSON snapshot workspace lifecycle-данных;
|
||
- `DELETE /workspaces/{workspace_id}` разрешен только `owner`.
|
||
|
||
### 5.2. Auth and session
|
||
|
||
- `POST /api/auth/login`
|
||
- `POST /api/auth/logout`
|
||
- `GET /api/auth/session`
|
||
- `GET /api/auth/profile`
|
||
- `PATCH /api/auth/profile`
|
||
- `POST /api/auth/current-workspace`
|
||
- `POST /api/auth/password`
|
||
|
||
Контракт:
|
||
|
||
- `POST /login` принимает `email` и `password`;
|
||
- при успешном логине backend выставляет `HttpOnly` session cookie;
|
||
- `GET /session` возвращает текущего пользователя, memberships и `current_workspace_id`;
|
||
- `GET /profile` возвращает текущего пользователя, memberships и `current_workspace_id` для settings UI;
|
||
- `PATCH /profile` обновляет `display_name` и `email` текущего пользователя;
|
||
- `POST /current-workspace` переключает текущий workspace внутри текущей authenticated session;
|
||
- `POST /password` меняет пароль текущего пользователя после проверки `current_password`;
|
||
- `POST /logout` инвалидирует текущую session.
|
||
|
||
### 5.3. Operations
|
||
|
||
- `GET /api/admin/workspaces/{workspace_id}/operations`
|
||
- `POST /api/admin/workspaces/{workspace_id}/operations`
|
||
- `GET /api/admin/workspaces/{workspace_id}/operations/{operation_id}`
|
||
- `PATCH /api/admin/workspaces/{workspace_id}/operations/{operation_id}`
|
||
- `DELETE /api/admin/workspaces/{workspace_id}/operations/{operation_id}`
|
||
- `POST /api/admin/workspaces/{workspace_id}/operations/{operation_id}/versions`
|
||
- `GET /api/admin/workspaces/{workspace_id}/operations/{operation_id}/versions/{version}`
|
||
- `POST /api/admin/workspaces/{workspace_id}/operations/{operation_id}/publish`
|
||
- `POST /api/admin/workspaces/{workspace_id}/operations/{operation_id}/archive`
|
||
- `POST /api/admin/workspaces/{workspace_id}/operations/{operation_id}/test-runs`
|
||
- `GET /api/admin/workspaces/{workspace_id}/operations/{operation_id}/export`
|
||
- `POST /api/admin/workspaces/{workspace_id}/operations/import`
|
||
|
||
### 5.4. Samples and descriptors
|
||
|
||
- `POST /api/admin/workspaces/{workspace_id}/operations/{operation_id}/samples/input-json`
|
||
- `POST /api/admin/workspaces/{workspace_id}/operations/{operation_id}/samples/output-json`
|
||
- `POST /api/admin/workspaces/{workspace_id}/operations/{operation_id}/drafts/generate`
|
||
- `POST /api/admin/workspaces/{workspace_id}/operations/{operation_id}/descriptors/proto`
|
||
- `POST /api/admin/workspaces/{workspace_id}/operations/{operation_id}/descriptors/descriptor-set`
|
||
- `POST /api/admin/workspaces/{workspace_id}/operations/{operation_id}/descriptors/wsdl`
|
||
- `POST /api/admin/workspaces/{workspace_id}/operations/{operation_id}/descriptors/xsd`
|
||
- `GET /api/admin/workspaces/{workspace_id}/operations/{operation_id}/grpc/services`
|
||
- `GET /api/admin/workspaces/{workspace_id}/operations/{operation_id}/soap/services`
|
||
|
||
Контракт:
|
||
|
||
- `POST /descriptors/wsdl` принимает raw WSDL payload и сохраняет inspection metadata для SOAP;
|
||
- `POST /descriptors/xsd` принимает supporting XSD artifacts для SOAP operation;
|
||
- `GET /soap/services` возвращает нормализованный список `service -> port -> operation` из последнего WSDL текущего draft version.
|
||
|
||
### 5.5. Upstream auth profiles
|
||
|
||
- `GET /api/admin/workspaces/{workspace_id}/secrets`
|
||
- `POST /api/admin/workspaces/{workspace_id}/secrets`
|
||
- `GET /api/admin/workspaces/{workspace_id}/secrets/{secret_id}`
|
||
- `POST /api/admin/workspaces/{workspace_id}/secrets/{secret_id}/rotate`
|
||
- `DELETE /api/admin/workspaces/{workspace_id}/secrets/{secret_id}`
|
||
|
||
- `GET /api/admin/workspaces/{workspace_id}/auth-profiles`
|
||
- `POST /api/admin/workspaces/{workspace_id}/auth-profiles`
|
||
- `GET /api/admin/workspaces/{workspace_id}/auth-profiles/{auth_profile_id}`
|
||
- `PATCH /api/admin/workspaces/{workspace_id}/auth-profiles/{auth_profile_id}`
|
||
- `DELETE /api/admin/workspaces/{workspace_id}/auth-profiles/{auth_profile_id}`
|
||
|
||
Контракт:
|
||
|
||
- `POST /secrets` принимает metadata и plaintext value, но create-response возвращает только metadata;
|
||
- `GET /secrets` и `GET /secrets/{secret_id}` возвращают только metadata, `kind`, `status`, `current_version`, `created_at`, `updated_at`, `last_used_at` при наличии;
|
||
- `POST /secrets/{secret_id}/rotate` создает новую secret version;
|
||
- `DELETE /secrets/{secret_id}` в secret foundation удаляет secret без reference checks; валидация ссылок добавляется в `feat/auth-profile-secret-resolution`;
|
||
- `AuthProfile.config` хранит ссылки на `secret_id`, а не placeholder-строки `${secrets.*}`.
|
||
|
||
### 5.6. Agents
|
||
|
||
- `GET /api/admin/workspaces/{workspace_id}/agents`
|
||
- `POST /api/admin/workspaces/{workspace_id}/agents`
|
||
- `GET /api/admin/workspaces/{workspace_id}/agents/{agent_id}`
|
||
- `PATCH /api/admin/workspaces/{workspace_id}/agents/{agent_id}`
|
||
- `DELETE /api/admin/workspaces/{workspace_id}/agents/{agent_id}`
|
||
- `POST /api/admin/workspaces/{workspace_id}/agents/{agent_id}/versions`
|
||
- `GET /api/admin/workspaces/{workspace_id}/agents/{agent_id}/versions/{version}`
|
||
- `POST /api/admin/workspaces/{workspace_id}/agents/{agent_id}/publish`
|
||
- `POST /api/admin/workspaces/{workspace_id}/agents/{agent_id}/unpublish`
|
||
- `POST /api/admin/workspaces/{workspace_id}/agents/{agent_id}/archive`
|
||
- `POST /api/admin/workspaces/{workspace_id}/agents/{agent_id}/bindings`
|
||
- `DELETE /api/admin/workspaces/{workspace_id}/agents/{agent_id}/bindings/{operation_id}`
|
||
|
||
### 5.7. Platform API keys
|
||
|
||
- `GET /api/admin/workspaces/{workspace_id}/platform-api-keys`
|
||
- `POST /api/admin/workspaces/{workspace_id}/platform-api-keys`
|
||
- `POST /api/admin/workspaces/{workspace_id}/platform-api-keys/{key_id}/revoke`
|
||
- `DELETE /api/admin/workspaces/{workspace_id}/platform-api-keys/{key_id}`
|
||
|
||
Контракт:
|
||
|
||
- `POST /platform-api-keys` возвращает metadata ключа и одноразовый `secret`;
|
||
- `secret` доступен только в create-response;
|
||
- list endpoints возвращают только metadata, `prefix`, `status`, `scopes` и `last_used_at`.
|
||
- `last_used_at` обновляется при успешной machine-auth аутентификации этим ключом в `mcp-server`.
|
||
|
||
### 5.8. Observability
|
||
|
||
- `GET /api/admin/workspaces/{workspace_id}/logs`
|
||
- `GET /api/admin/workspaces/{workspace_id}/logs/{log_id}`
|
||
- `GET /api/admin/workspaces/{workspace_id}/usage`
|
||
- `GET /api/admin/workspaces/{workspace_id}/usage/operations/{operation_id}`
|
||
- `GET /api/admin/workspaces/{workspace_id}/usage/agents/{agent_id}`
|
||
|
||
Контракт:
|
||
|
||
- `GET /logs` поддерживает `level`, `search`, `source`, `operation_id`, `agent_id`, `period`, `limit`;
|
||
- `period` использует UI-friendly значения `30m`, `1h`, `6h`, `24h`, `7d`, `30d`, `90d`, `this_month`;
|
||
- `source` различает `admin_test_run` и `agent_tool_call`;
|
||
- `GET /usage` возвращает `summary`, `timeline`, `operations`, `agents` одним ответом;
|
||
- detail endpoints по operation и agent возвращают rollup для выбранного периода.
|
||
|
||
## 6. Page-to-endpoint mapping
|
||
|
||
### Operations catalog
|
||
|
||
Нужны:
|
||
|
||
- список операций;
|
||
- удаление операции;
|
||
- edit/open operation;
|
||
- publish/archive;
|
||
- usage summary для карточек и фильтров.
|
||
|
||
### Wizard
|
||
|
||
Нужны:
|
||
|
||
- create/update version;
|
||
- test run;
|
||
- samples;
|
||
- draft generation;
|
||
- gRPC descriptor upload и discovery.
|
||
- upstream auth selector;
|
||
- quick-create secret / auth profile modal.
|
||
- execution mode selector;
|
||
- streaming config blocks;
|
||
- stream test-runs;
|
||
- tool family preview.
|
||
|
||
Детальные DTO и response shapes для экранов `Operations` и `Wizard` зафиксированы отдельно в:
|
||
|
||
- `docs/operations-workspace-contracts.md`
|
||
|
||
### Agents
|
||
|
||
Нужны:
|
||
|
||
- CRUD агентов;
|
||
- bindings к operations;
|
||
- publish agent;
|
||
- выдача MCP endpoint metadata.
|
||
|
||
### API Keys
|
||
|
||
Нужны:
|
||
|
||
- list/create/revoke/delete platform API keys;
|
||
- one-time reveal значения ключа при создании.
|
||
|
||
### Secrets
|
||
|
||
Нужны:
|
||
|
||
- list/create/rotate/delete upstream secrets;
|
||
- metadata-only retrieval после создания;
|
||
- связь с auth profiles;
|
||
- usage references, чтобы оператор видел, где секрет используется.
|
||
|
||
### Logs
|
||
|
||
Нужны:
|
||
|
||
- list logs с фильтрами;
|
||
- log detail;
|
||
- polling или live refresh strategy.
|
||
|
||
### Usage
|
||
|
||
Нужны:
|
||
|
||
- агрегаты по периодам;
|
||
- breakdown по operation;
|
||
- breakdown по agent;
|
||
- CSV export.
|
||
|
||
Текущая реализация:
|
||
|
||
- summary и breakdown считаются по `invocation_logs`;
|
||
- materialized `usage_rollups` остаются совместимым storage-слоем для дальнейшей оптимизации, но не являются единственным source of truth в MVP.
|
||
|
||
## 7. Принцип совместимости
|
||
|
||
Если UI расходится с текущим backend, приоритет отдается целевой продуктовой модели, но конфликт должен быть явно разобран в `docs/as-is-to-be.md` до начала реализации.
|