Как настроить интеграцию 1С и Redmine через REST API?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При организации совместной работы системы 1С и трекера задач Redmine часто возникает вопрос выбора подходящей библиотеки или готового механизма взаимодействия. На практике специализированные внешние компоненты не требуются — обмен данными между системами реализуется через стандартный REST API Redmine с использованием HTTP-запросов и формата данных JSON или XML.

Рассмотрим по шагам, как устроено взаимодействие между 1С и Redmine, какие параметры необходимо настроить на стороне сервера и как правильно реализовать отправку и получение данных средствами платформы 1С.

Настройка доступа и аутентификация в Redmine

Перед началом разработки в 1С убедимся, что служба REST API включена на стороне Redmine. Проанализируем порядок предварительных настроек:

  1. Перейдем в интерфейс Redmine с правами администратора в раздел «Администрирование» -> «Настройки» -> «Аутентификация» (или вкладка «API»).
  2. Включим опцию разрешения работы REST веб-службы.
  3. Для выполнения запросов получим персональный API-ключ пользователя (отображается в профиле пользователя в правой колонке).

Для передачи ключа в запросах 1С используется специальный HTTP-заголовок X-Redmine-API-Key. Также Redmine поддерживает базовую HTTP-авторизацию (Basic Authentication) через передачу логина и пароля в заголовке Authorization, однако использование API-ключа считается более безопасным и удобным подходом.

Реализация HTTP-запросов в платформе 1С

Разберем, как выполняется отправка данных из 1С. Взаимодействие построено на использовании объектов HTTPСоединение и HTTPЗапрос. Посмотрим на основные технические нюансы построения кода:

  1. Если Redmine работает по защищенному протоколу HTTPS, объект HTTPСоединение обязательно инициализируется с указанием параметра ЗащищенноеСоединение, для которого создается объект ЗащищенноеСоединениеOpenSSL.
  2. В заголовках запроса задается формат передаваемых данных: Content-Type: application/json или Content-Type: application/xml.
  3. Формирование структуры передаваемого тела и разбор полученного ответа от сервера удобно производить с помощью встроенных функций ЗаписатьJSON и ПрочитатьJSON.

Рассмотрим пример создания и выполнения POST-запроса для передачи данных из 1С в Redmine в формате JSON:


// Инициализация защищенного HTTPS-соединения
ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL();
Соединение = Новый HTTPСоединение("redmine.yourcompany.com", 443, , , , , ЗащищенноеСоединение);

// Формирование заголовков запроса
Заголовки = Новый Соответствие();
Заголовки.Вставить("Content-Type", "application/json");
Заголовки.Вставить("X-Redmine-API-Key", APIКлючПользователя);

// Создание HTTP-запроса к ресурсу создания задачи
Запрос = Новый HTTPЗапрос("/issues.json", Заголовки);
Запрос.УстановитьТелоИзСтроки(ТекстТелаJSON, КодировкаТекста.UTF8);

// Отправка запроса и получение ответа
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
КодСостояния = Ответ.КодСостояния;

Особенности передачи файлов и дополнительных полей

При работе с REST API Redmine важно учитывать специфику структуры данных задачи:

  1. Двухэтапная загрузка вложений. Файлы не прикрепляются к задаче в момент её создания. Процесс разделен на два шага:

    Сначала двоичные данные файла отправляются POST-запросом на адрес /uploads.json с заголовком Content-Type: application/octet-stream. В ответ Redmine возвращает токен (идентификатор загрузки).

    Затем при создании или изменении задачи в структуру JSON добавляется массив uploads, в котором передаются токен, имя файла filename и его описание.

  2. Передача пользовательских реквизитов (Custom Fields). Если в Redmine используются дополнительные поля задач, они передаются внутри объекта задачи в массиве custom_fields. Для каждого реквизита необходимо указывать его идентификатор id и значение value.

Ограничения выборки и способы получения уведомлений

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

  1. Пагинация списков: По умолчанию Redmine возвращает только 25 записей за один GET-запрос (максимальное ограничение — 100 записей). Чтобы выгрузить полный список задач или записей трудозатрат в 1С, необходимо организовать цикл с передачей параметров limit и offset в URL-строке запроса.
  2. Получение оперативных уведомлений: База 1С не сможет напрямую принимать входящие вызовы от Redmine, если она не опубликована на веб-сервере (Apache или IIS) и в ней не создан HTTPСервис. Без публикации 1С может работать с Redmine только в режиме периодического опроса через РегламентныеЗадания.

Альтернативные варианты интеграции

В зависимости от архитектуры предприятия и требований к скорости обмена можно рассмотреть следующие альтернативные подходы:

  1. Вебхуки (Webhooks): Установка плагина Webhooks в Redmine позволяет отправлять события (создание/изменение задачи, добавление комментария) мгновенно на опубликованный HTTPСервис базы 1С. Это исключает необходимость постоянного фонового опроса API Redmine.
  2. Прямое чтение из базы данных: Допускается подключение из 1С к СУБД Redmine (PostgreSQL или MySQL) через ODBC или ADODB.Connection. Этот способ подходит исключительно для чтения данных при построении сложной аналитической отчетности. Прямая запись в СУБД Redmine категорически запрещена, так как это нарушает внутреннюю логику и целостность данных системы.
  3. Использование брокера сообщений: При высокой нагрузке и сложном ландшафте систем между 1С и Redmine настраивается асинхронный шинный обмен (например, через RabbitMQ).
← На главную