Анализ и модернизация коннектора баз данных с помощью AI-агентов

Анализ и модернизация коннектора баз данных с помощью AI-агентов

В рамках цикла статей по ИИ-ассистированной разработке решений для Битрикс24 — четвёртая часть, посвящённая работе с BI-коннектором. Этот инструмент позволяет интегрировать внешние базы данных с порталом, обеспечивая аналитику не только по внутренним данным (сделкам, клиентам), но и по сторонним источникам.

Что нужно установить перед работой

Для старта используется репозиторий github.com/bitrix24/bi-connector. Итоговый проект доступен в репозитории igorrosliakov-bitrix24/Bitrix24-BIConnector.

Требуемые компоненты:

  • Docker и Docker Compose — для контейнеризации;
  • Git — для управления версиями;
  • make — для удобного запуска команд;
  • HTTPS-туннель через CloudPub — для внешнего доступа к локальному сервису.

Что такое BI-коннектор и как он работает

BI-коннектор — это отдельный серверный сервис, который выступает мостом между Битрикс24 и внешними базами данных. Он не встраивается в портал, а принимает от него HTTP-запросы и отвечает в JSON-формате.

Схема работы:

  • Внешняя база данных (на сервере, в облаке или локально) подключается через коннектор.
  • BI-коннектор передаёт параметры подключения.
  • Через коннектор Битрикс24 получает доступ к таблицам и данным.

Анализ проекта для дальнейшей работы

AI-агент (Codex) проанализировал проект и выделил три основных слоя архитектуры.

Основные точки входа

  • Application.php — управляет установкой и регистрацией коннекторов в Битрикс24.
  • index.php — обрабатывает входящие BI-запросы.
  • BiConnector.php — отвечает за подключение к БД и реализацию контракта BI-коннектора.
  • QueryBuilder.php — формирует SQL-запросы.

1. Слой установки

Класс Application.php обрабатывает событие установки, сохраняет данные аутентификации и регистрирует в портале два коннектора: MySQL и PostgreSQL. При этом передаются URL-адреса для:

  • проверки подключения;
  • получения списка таблиц;
  • получения схемы;
  • получения данных.

2. Слой HTTP-обработки

Входящие запросы обрабатываются через public/index.php, а после оптимизации — через отдельный ConnectorRequestHandler.php. Этот слой:

  • читает параметры запроса (action, connection_type);
  • парсит JSON-тело;
  • валидирует данные;
  • создаёт нужный коннектор;
  • вызывает соответствующее действие.

3. Слой работы с БД

BiConnector.php управляет подключением к базе, проверкой доступности, получением списка и структуры таблиц. QueryBuilder.php формирует SQL-запросы с учётом select, filter и limit, возвращая данные в формате, ожидаемом порталом.

Задача 1: установка в портал

Чтобы подключить коннектор к Битрикс24, необходимо обеспечить внешний доступ к локальному сервису.

Поднимаем проект локально

Проект запускается через Docker. Требуется:

  • клонировать репозиторий;
  • создать файл .env;
  • запустить контейнеры через docker-compose.

Добавить туннель / внешний доступ

Битрикс24 требует HTTPS-доступ к приложению. Используется туннель через CloudPub. После регистрации и получения токена он добавляется в .env. Проект должен знать свой публичный домен — для этого вводится переменная APP_DOMAIN.

Подключить приложение к порталу

После настройки туннеля приложение регистрируется в портале как локальное. Важно поставить галочку «Использует только API» и указать права biconnector.

Что поменял и добавил агент

В .env.example добавлены:

  • CLOUDPUB_TOKEN — для туннеля;
  • CLOUDPUB_IMAGE — выбор Docker-образа;
  • BITRIX24_PHP_SDK_APPLICATION_SCOPE=biconnector — фиксация типа приложения.

В docker-compose.yml добавлен сервис cloudpub, который:

  • принимает токен;
  • прокидывает трафик на app:80;
  • работает в одной сети с приложением;
  • создаёт HTTPS-адрес для локального сервиса.

В Makefile добавлены команды:

  • dev-init — инициализация;
  • start-cloudpub — запуск туннеля;
  • logs-cloudpub — просмотр логов.

Скрипт scripts/dev-init.sh автоматически:

  • запускает приложение и туннель;
  • извлекает внешний URL из логов;
  • записывает его в APP_DOMAIN;
  • перезапускает приложение с новым доменом.

В Application.php уточнена логика формирования URL-адресов на основе APP_DOMAIN.

Проверяем, что приложение установилось

Для проверки:

  • в разделе «BI-конструктор» → «Рабочее место аналитика» создаётся новое подключение;
  • выбирается тип базы (MySQL/PostgreSQL);
  • заполняются параметры подключения;
  • выполняется проверка.

При успехе можно выбрать таблицу и просмотреть её данные. Альтернатива — проверка через curl, например:

  • проверка подключения;
  • запрос списка таблиц;
  • описание структуры таблицы.

Задача 2: оптимизация безопасности и покрытие тестами

Проект был улучшен по двум направлениям: безопасность и тестирование.

Усиление безопасности

  • Некорректный JSON возвращает 400 Bad Request, а не падает.
  • При отсутствии обязательных параметров возвращается понятная ошибка.
  • Чувствительные данные (пароли, токены) маскируются в логах.
  • Имена таблиц в MySQL-запросах экранируются корректно.

Расширение тестового покрытия

Добавлены тесты для:

  • битого JSON;
  • отсутствия connection;
  • некорректного connection_type;
  • неизвестного action;
  • нормализации limit;
  • преобразования имён полей;
  • сборки SQL-запросов;
  • безопасного логирования.

Что поменял и добавил агент

ConnectorRequestHandler.php — новый класс для обработки запросов. Он:

  • парсит action и connection_type;
  • извлекает данные из form-data и JSON;
  • валидирует параметры;
  • возвращает контролируемые ошибки (400/500);
  • централизует вызовы check, table_list, table_description, data.

public/index.php стал проще — делегирует логику ConnectorRequestHandler.

В Application.php добавлен процессор логов, который санитизирует контекст. Чувствительные ключи (password, token, secret и др.) заменяются на ***.

Метод formatResponseForLog() безопасно парсит JSON-ответы и маскирует секреты перед записью в лог.

В BiConnector.php улучшена безопасность при инспекции схемы MySQL.

Добавлен Dockerfile.test с Xdebug для сбора coverage.

В Makefile добавлена команда test-coverage. Отчёт сохраняется в coverage/ в формате HTML.

Расширены unit-тесты.

Задача 3: модернизация проекта — добавляем автомаппинг

Добавлена фича автоматического преобразования имён полей между внешней БД и форматом Битрикс24.

Пример:

  • В БД: Created By;
  • В Битрикс24: CREATED_BY.

Требуется двусторонний маппинг, чтобы:

  • отдавать структуру в безопасном формате;
  • преобразовывать запросы из Битрикс24 в реальные имена колонок.

Фича устраняет проблемы с пробелами, регистром, спецсимволами и дефисами.

Что поменял и добавил агент

Шаг 1: создан FieldNameMapper.php. Он:

  • принимает список полей;
  • преобразует в Bitrix-совместимый формат (например, City / RegionCITY_REGION);
  • решает коллизии через суффиксы (например, CREATED_BY_2).

Шаг 2: маппинг интегрирован в BiConnector.php. Метод table_description теперь возвращает нормализованные имена, а getData() передаёт маппинг в слой запросов.

Шаг 3: QueryBuilder.php обновлён. Запросы с CREATED_BY транслируются в Created By для SQL, а в ответе снова возвращаются как CREATED_BY.

Автомаппинг работает для:

  • SELECT;
  • filter;
  • LIKE;
  • IN;
  • BETWEEN;
  • =.

Добавлена демо-таблица friendly_columns с полями: Created By, Office Name, City / Region, Opened At.

Функциональность покрыта тестами в FieldNameMapperTest.php и QueryBuilderTest.php.

Итог: AI-агент успешно модернизировал проект по трём направлениям:

  1. настройка HTTPS-туннеля для подключения к порталу;
  2. усиление безопасности и тестового покрытия;
  3. внедрение автомаппинга полей.

Самым сложным этапом оказалось чёткое формулирование задачи. Исполнение прошло быстро и без зависаний.

Что будет дальше

В следующей статье цикла — работа с чат-ботами на бэкенде. Предыдущие темы: создание приложений с AI-стартером, автоматизация через роботов, воспроизводимая среда разработки.

Содержание цикла статей

  1. Пишем первое приложение с AI-стартером, чтобы видеть прибыли и убытки
  2. Добавляем в бизнес-портал Битрикс24 роботов для автоматизации
  3. Что даёт воспроизводимая среда разработки и как развернуть контейнеры на VPS
  4. Анализ и модернизация коннектора баз данных с помощью AI-агентов
Читать оригинал