4.6 KiB
Эндпоинты, с которыми взаимодействует 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).