Эндпоинты внешних сервисов, с которыми взаимодействует documentations-api
Документ описывает HTTP-эндпоинты внешних сервисов, к которым обращается сервис документаций (оба бинарника — cmd/api и cmd/filestreamer). В отличие от фронтенда, единого декларативного реестра эндпоинтов здесь нет — каждый внешний сервис инкапсулирован в собственном клиенте в каталогах clients/ и pkg/.
Как устроено взаимодействие
Клиенты создаются при старте (cmd/api/routes_api.go, cmd/filestreamer/*) и используют базовый URL из соответствующей переменной окружения (см. config/config.go). Большинство клиентов построены на go-resty/resty (метод SetHostURL/SetBaseURL), часть — на внутренних http-обёртках gitlab.sarex.io/platform/gotools. Итоговый URL = <базовый URL сервиса> + путь из клиента.
Аутентификация исходящих запросов:
- к Sarex backend (Django) — HTTP Basic (
DJANGO_BASIC_AUTH, а для получения пользователей — DJANGO_BASIC_AUTH_FOR_GET_USER); для части ручек проксируется заголовок Identity/Bearer;
- к остальным сервисам — по внутренней сети кластера, как правило без внешней авторизации.
Базовые URL по сервисам
| Сервис |
Переменная окружения |
Клиент (каталог) |
| Sarex backend (Django) |
DJANGO_HOST |
clients/django, pkg/django, pkg/users, pkg/sarex_backend, clients/accounts |
| Flows |
FLOWS_URL |
pkg/flows |
| Workflows |
WORKFLOW_URL |
clients/workflow, pkg/workflows |
| Workspaces |
WORKSPACE_URL |
clients/workspace |
| Transmittals |
TRANSMITTALS_BASE_URL (опц.) |
pkg/transmittal |
| Automation |
AUTOMATION_URL |
pkg/automation |
| Marks (штампы, HTTP) |
MARKS_PROCESSING_URL |
pkg/marks/base |
| Marks (штампы, RabbitMQ) |
MARKS_RABBITMQ_* |
pkg/marks/rpc |
| BIM-API v1 |
BIM_API_URL |
clients/bim-api |
| BIM-API v2 (bim-core-api) |
BIM_API_V2_URL |
clients/bim-api-v2 |
| System log |
SYSTEM_LOG_URL |
pkg/system_log |
Дополнительно сервис работает с S3 (объектное хранилище, креды из S3_SERVICE_ACCOUNT/S3_SERVICE_ACCOUNT_STR) и PostgreSQL — это не HTTP-сервисы и в таблицах ниже не приводятся.
Эндпоинты по сервисам
Sarex backend (Django) — DJANGO_HOST
| Метод |
Путь |
Клиент |
Назначение |
| GET |
/api/core/users/ |
clients/django/users.go |
Список пользователей |
| GET |
/api/core/users/{id}/ |
clients/django/users.go, pkg/users/client.go |
Пользователь по id |
| GET |
/api/core/users/{id}/introspect |
clients/django/users.go |
Интроспекция пользователя |
| GET |
/api/core/users/{id} |
pkg/django/client.go |
Пользователь по id (внутренний клиент) |
| GET |
/api/client/settings/ |
clients/django/settings.go |
Клиентские настройки |
| GET |
/api/core/service-accounts/personalized/ |
clients/django/settings.go |
Персонализированные сервисные аккаунты |
| GET |
/api/core/service_accounts/ |
clients/django/service_accounts.go, clients/accounts |
Сервисные аккаунты |
| GET |
/api/core/companies/ |
clients/django/companies.go |
Список компаний |
| GET |
/api/core/mrpa/{id}/ |
pkg/sarex_backend/client.go |
MRPA по id (прокидывается заголовок Identity) |
Flows — FLOWS_URL
| Метод |
Путь |
Клиент |
Назначение |
| GET |
internal/v1/documents/?full=true&document_ids={id} |
pkg/flows/client.go |
Документы в процессах (flows) по id |
| GET/POST |
internal/v1/documents/ |
pkg/flows/client.go |
Документы процессов |
Workflows — WORKFLOW_URL
| Метод |
Путь |
Клиент |
Назначение |
| POST |
internal/v1/companies/{company_id}/workflows |
clients/workflow/client.go |
Создать workflow обработки (BIM/PDF/DWG/DEM/DOCX и т. д.); образы задач — из CONTAINER_REGISTRY + WORKFLOWS_IMAGES_VERSION |
| GET |
v1/workflows/{id} |
pkg/workflows/client.go |
Прочитать workflow по id |
Workspaces — WORKSPACE_URL
| Метод |
Путь |
Клиент |
Назначение |
| POST |
internal/v2/workspaces |
clients/workspace/client.go |
Создать воркспейс |
| DELETE |
internal/v2/documents/{ids} |
clients/workspace/client.go |
Удалить документы воркспейса |
| PATCH |
internal/v2/documents/restore |
clients/workspace/client.go |
Восстановить документы воркспейса |
Transmittals — TRANSMITTALS_BASE_URL
Клиент создаётся только если переменная задана.
| Метод |
Путь |
Клиент |
Назначение |
| POST |
/internal/v1/transmittals/by_bundle_ids |
pkg/transmittal/client.go |
Трансмитталы по списку bundle-id |
Automation — AUTOMATION_URL
| Метод |
Путь |
Клиент |
Назначение |
| — |
/internal/v1/automations/{process_name} |
pkg/automation/client.go |
Запуск/получение автоматизации по имени процесса |
Marks (штампы/маркировки)
Режим выбирается флагом USE_MARKS_RABBITMQ.
| Метод |
Путь / транспорт |
Клиент |
Назначение |
| POST |
/api/v1/marks/{bundle_id} (HTTP, MARKS_PROCESSING_URL) |
pkg/marks/base/client.go |
Наложение штампов на бандл (HTTP-режим) |
| — |
RabbitMQ (MARKS_RABBITMQ_*) |
pkg/marks/rpc |
Наложение штампов через очередь (RPC-режим, не HTTP) |
BIM-API v1 — BIM_API_URL
| Метод |
Путь |
Клиент |
Назначение |
| POST |
/internal/v1/targets/{target_id}/bims-pdm |
clients/bim-api/client.go |
Создать BIM для target (PDM) |
| POST |
/internal/v1/targets/{target_id}/bims-v2-pdm |
clients/bim-api/client.go |
Создать BIM v2 для target (PDM) |
BIM-API v2 (bim-core-api) — BIM_API_V2_URL
| Метод |
Путь |
Клиент |
Назначение |
| POST |
/internal/v1/projects/{project_id}/bims |
clients/bim-api-v2/client.go |
Создать BIM для проекта |
System log — SYSTEM_LOG_URL
| Метод |
Путь |
Клиент |
Назначение |
| POST |
/api/v0/system_log |
pkg/system_log/client.go |
Отправить запись в системный лог |
Обработка ошибок
Клиенты, как правило, проверяют код ответа и оборачивают ошибку через github.com/rotisserie/eris (напр. «invalid response code %d expected 200»). Для случая недоступности исходного сервиса в самом API определён нестандартный статус 523 (network/consts.go, StatusOriginIsUnreachable).