iac/apps/bim/ENDPOINTS.md

4.6 KiB
Raw Permalink Blame History

Эндпоинты, с которыми взаимодействует bim-backend-v2

Документ описывает все HTTP-эндпоинты внешних сервисов, к которым обращается сам сервис bim-backend-v2 (исходящие вызовы). Эндпоинты, которые сервис предоставляет, описаны в openapi.yaml.

Как устроено взаимодействие

Исходящие вызовы выполняются HTTP-клиентом на базе go-resty/resty в пакете pkg/django_client (DjangoClient). Клиент создаётся в NewRestClient:

  • базовый хост — SetHostURL(cfg.DjangoHost) (переменная DJANGO_HOST);
  • таймаут запроса — SetTimeout(10 * time.Second);
  • число повторов — SetRetryCount(5).

Аутентификация проксируется: JWT пользователя извлекается из контекста запроса (auth.JWTFromContext), при необходимости отбрасывается схема Bearer , и токен передаётся во внешний сервис заголовком Authorization: Bearer <jwt> (SetAuthToken + SetAuthScheme("Bearer")). Заголовок Content-Type: application/json.

В режиме интеграционных тестов (INTEGRATION_TESTS=1) внешний вызов не выполняется — CheckUserIsAdmin возвращает true.

Базовые хосты по сервисам и окружениям

Значение берётся из переменной DJANGO_HOST (см. CONFIGURATION.md). Итоговый URL = <DJANGO_HOST> + path эндпоинта.

Сервис Назначение Значение DJANGO_HOST
django (Sarex backend) Проверка прав пользователя (админ/не админ) локально/stage: https://stage.sarex.io; preprod: https://lk.preprod.sarex.io; prod: https://lk.sarex.io; контур (IaC): http://backend.django.svc.cluster.local:8000

Эндпоинты по сервисам

django — Sarex backend

Метод Путь Назначение
GET api/client/settings/ Получить настройки текущего пользователя. Используется поле is_admin (проверка прав администратора в CheckUserIsAdmin)

Детали вызова GET api/client/settings/:

Параметр Значение
Заголовки Authorization: Bearer <jwt пользователя>, Content-Type: application/json
Тело запроса нет
Ожидаемый ответ { "is_admin": bool } (структура userSettingsFromDjango)
Успешные статусы 200, 201
Поведение при ошибке Любая ошибка транспорта, resp == nil или статус вне 200/201 логируется, метод трактует пользователя как не администратора (false)

Где используется

Проверка CheckUserIsAdmin вызывается в обработчиках, изменяющих модели статусов (требуют прав администратора). При отсутствии прав такие эндпоинты возвращают 403 No admin rights:

  • POST /api/v1/bims/{bim_id}/status_model — создание модели статусов BIM;
  • DELETE /api/v1/bims/{bim_id}/delete_status_model — удаление модели статусов BIM;
  • POST /api/v1/companies/{company_id}/status_model — создание модели статусов компании;
  • DELETE /api/v1/companies/{company_id}/status_model — удаление модели статусов компании.

Замечания

  • Единственная внешняя HTTP-зависимость сервиса — Django-бэкенд (DJANGO_HOST). Прочие интеграции (PostgreSQL, pprof) не являются HTTP-вызовами к внешним REST-сервисам.
  • Подпись JWT самим сервисом не проверяется — проброшенный токен просто пересылается в Django, который и выполняет авторизацию (см. также раздел «Аутентификация» в openapi.yaml).