Метод POST /api/v1/connector/{id_connector}/configuration-metadata/{configuration_metadata_type}
Краткое описание
Создаёт новую запись метаданных конфигурации 1С для объектов в базе данных. Эндпоинт поддерживает:
Потоковую передачу больших объёмов данных (streaming)
Сжатие данных алгоритмом gzip
Вставку данных через механизм COPY PostgreSQL (высокая производительность)
Входные параметры
Параметры пути (обязательные):
id_connector(строка)Уникальный идентификатор коннектора 1С
Пример:
8f4e5a2c-1234-5678-90ab-cdef12345678
configuration_metadata_type(enum, обязательный)Тип метаданных конфигурации
Допустимые значения определены в enum
ConfigurationMetadataTypeПримеры:
common,constants,catalogs,documents,document-journals,enumerations,reports,data-processors,charts-of-characteristic-types,charts-of-accounts,charts-of-calculation-types,information-registers,accumulation-registers,accounting-registers,calculation-registers,business-processes,tasks,external-data-sources,other.При передаче неверного значения возвращается 400 с сообщением об ошибке
Заголовки запроса (опциональные):
Content-Encoding (заголовок, опциональный)
Если значение "gzip" — данные в теле запроса сжаты алгоритмом gzip
По умолчанию: не сжато
Используется для оптимизации при передаче больших файлов
Пример:
Content-Encoding: gzip
Тело запроса (обязательное):
Бинарные данные
Формат: JSON или бинарные данные
Может быть обычные данные или gzip-сжатые (если
Content-Encoding: gzip)Максимальный размер зависит от конфигурации сервера
Данные передаются потоком (streaming) — обрабатываются по частям
Алгоритм работы метода
ЭТАП 1: Инициализация и валидация
Проверяется, что
configuration_metadata_typeявляется допустимым значениемenumЕсли нет — возвращается
HTTPException(400)Генерируется новый UUID для уникального идентификатора записи
Извлекается заголовок
Content-Encodingдля определения нужна ли распаковкаЕсли
Content-Encoding == "gzip"— создаётся декомпрессор zlib
ЭТАП 2: Подготовка данных для CSV формата
Все строковые значения (
UUID,id_connector,type) экранируются для CSV:Каждая кавычка (") заменяется на две кавычки ("")
Это необходимо для корректного парсинга CSV при вставке в БД
ЭТАП 3: Подключение к БД и создание потока COPY
Подключается к PostgreSQL через асинхронный коннектор psycopg
Создаётся асинхронный COPY поток для таблицы
configuration_metadata_entityCOPY используется вместо INSERT для высокой производительности
ЭТАП 4: Потоковая передача и обработка данных
Цикл async for chunk in
request.stream():Читает данные из тела запроса по частям (chunks)
Пропускает пустые chunks
Если gunzip активен — распаковывает каждый chunk
Экранирует кавычки в данных для CSV формата
Пишет в COPY поток
ЭТАП 5: Финализация распаковки
Если gunzip активен:
Вызывается
gunzip.flush()для получения оставшихся распакованных данныхТакже экранируются кавычки и пишутся в поток
ЭТАП 6: Завершение CSV строки и коммит
Закрывается CSV строка (добавляется закрывающая кавычка)
Добавляется символ новой строки (\n)
Выполняется
conn.commit()для фиксации транзакции
Итоговая структура в БД:
Таблица: configuration_metadata_entity Столбцы:
id_configuration_metadata_entity: сгенерированный UUIDid_connector: переданный идентификатор коннектораtype: тип метаданных (вenumформатеconfigurationmetadatatype)data: содержимое потока (JSON или бинарные данные)
Успешный ответ (200 OK)
Формат ответа:
{ "success": true, "message": "Entity created successfully.", "data": { "id_configuration_metadata_entity": "550e8400-e29b-41d4-a716-446655440000" } }
Поля ответа:
success (boolean): всегда true при успехеmessage (string): описательное сообщениеdata (object):id_configuration_metadata_entity: UUID новой созданной записи (используется для получения/обновления/удаления)