Как реализовать интеграцию 1С с REST-сервисами и получать данные по API?

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

В современной разработке на платформе 1С часто возникает задача взаимодействия с внешними информационными системами (например, синхронизация с Google календарем). Будь то государственные сервисы (например, Росреестр), распознавание документов, CRM-системы (Bitrix24), сервисы телефонии или корпоративные порталы — основным протоколом обмена данными сегодня является REST. В этой статье мы подробно разберем, как правильно организовать передачу и получение данных, настроить авторизацию и обработать ответы в формате JSON. Для этой задачи есть инструмент автоматической выгрузки из СКД во внешние системы по REST.

Понятие REST-сервиса в экосистеме 1С

Для начала проанализируем ситуацию: в 1С существует два аспекта работы с REST. Первый — это внутренний REST-интерфейс (OData), который позволяет сторонним приложениям обращаться к данным вашей базы. Второй — это использование 1С в качестве HTTP-клиента для обращения к внешним веб-сервисам. Рассмотрим подробнее именно второй вариант, так как он чаще всего вызывает вопросы у разработчиков.

Для взаимодействия с внешними сервисами в языке 1С используются основные объекты: HTTPСоединение, HTTPЗапрос и HTTPОтвет. Эти инструменты позволяют гибко настраивать параметры соединения, передавать заголовки авторизации и получать тело ответа для дальнейшей обработки.

Шаг 1. Создание защищенного HTTP-соединения

Большинство современных сервисов работают по протоколу HTTPS. Поэтому первым делом мы должны создать объект защищенного соединения. Проанализируем пример кода для инициализации связи с сервером:


// Настройка защищенного соединения (OpenSSL)
Защита = Новый ЗащищенноеСоединениеOpenSSL();

// Указываем хост сервера. Обратите внимание: протокол "https://" в строке хоста не пишется!
Хост = "rosreestr.ru.net"; 

// Создаем соединение. Таймаут лучше ставить с запасом (30-60 сек)
Соединение = Новый HTTPСоединение(Хост, , , , , 60, Защита);

При создании HTTPСоединение важно помнить, что первый параметр — это только имя домена. Если вы укажете полный URL с путем, система выдаст ошибку. Весь путь к конкретному методу API мы будем прописывать в объекте запроса.

Шаг 2. Формирование запроса и передача токенов авторизации

Разберем, как передать данные серверу. Большинство API требуют авторизации. Это может быть API Key (токен), передаваемый либо в строке запроса (URL), либо в заголовках HTTP. Посмотрим на пример, где токен передается как параметр пути:


// Пример передачи токена прямо в строке URL
ПутьКРесурсу = "/fir_lite_rest/api/gkn/fir_objects/67:27:0030708:1514?token=ВАШ_ТОКЕН";
Запрос = Новый HTTPЗапрос(ПутьКРесурсу);

// Отправляем GET-запрос
Ответ = Соединение.Получить(Запрос);

Однако более профессиональным и безопасным методом считается передача токена в заголовках (Headers). Выясним причину: заголовки не логируются серверами так явно, как параметры URL, и позволяют использовать стандарты вроде Bearer-авторизации. Рассмотрим, как добавить заголовки в 1С:


Заголовки = Новый Соответствие;
// Замените "Postman-Token" на реальный ключ, требуемый сервисом, например "Authorization"
Заголовки.Вставить("Authorization", "Bearer 048f97c8-16f0-466d-882e-0511921d59ff");
Заголовки.Вставить("Content-Type", "application/json");

Запрос = Новый HTTPЗапрос("/api/method", Заголовки);

Важное замечание: Не используйте технический заголовок Postman-Token для реальной авторизации. Это временный идентификатор, который программа Postman генерирует для себя. Для работы с реальным API вам нужно получить токен в личном кабинете разработчика соответствующего сервиса.

Шаг 3. Обработка ответа сервера и разбор JSON

После выполнения метода Получить() или ОтправитьДляОбработки(), мы получаем объект HTTPОтвет. Нам необходимо проверить, успешно ли прошел запрос, и извлечь данные. Проанализируем ситуацию на примере получения списка пользователей из внешней CRM (поможет модуль обмена данными между amoCRM и 1С через API):


Результат = Соединение.Получить(Запрос);

// Проверяем код состояния (200 - ОК)
Если Результат.КодСостояния = 200 Тогда
    
    // Получаем тело ответа в виде строки
    СтрокаJSON = Результат.ПолучитьТелоКакСтроку();
    
    // Десериализуем JSON в структуру 1С
    ЧтениеJSON = Новый ЧтениеJSON;
    ЧтениеJSON.УстановитьСтроку(СтрокаJSON);
    
    Данные = ПрочитатьJSON(ЧтениеJSON);
    ЧтениеJSON.Закрыть();
    
    // Теперь мы можем работать с данными как с обычной структурой или массивом
    Для Каждого Объект Из Данные.result Цикл
        Сообщить("Найдено: " + Объект.NAME);
    КонецЦикла;
    
Иначе
    Сообщить("Ошибка запроса! Код состояния: " + Результат.КодСостояния);
    Сообщить("Текст ошибки: " + Результат.ПолучитьТелоКакСтроку());
КонецЕсли;

Шаг 4. Отправка данных на сервер (POST-запрос)

Если задача стоит не только получить данные (GET), но и отправить их (POST), нам нужно подготовить тело запроса. Посмотрим на примере интеграции с Bitrix24 (для этого есть модуль интеграции 1С и Bitrix24), как отправить данные в формате строки параметров:


АдресМетода = "/rest/user.search";
ТелоЗапроса = "USER_TYPE=employee&LAST_NAME=Иванов";

Запрос = Новый HTTPЗапрос(АдресМетода);
Запрос.УстановитьТелоИзСтроки(ТелоЗапроса, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);

// Для POST-запросов часто используется метод ОтправитьДляОбработки или ВызватьHTTPМетод("POST")
Результат = Соединение.ОтправитьДляОбработки(Запрос);

Практические советы и особенности

При работе с REST в 1С рекомендуем придерживаться следующих правил:

  1. Кодирование URL: Кадастровые номера или адреса могут содержать спецсимволы (двоеточия, пробелы). Используйте функцию КодироватьСтроку(), чтобы избежать ошибок в пути запроса.
  2. Таймауты: Государственные сервисы часто работают медленно. Всегда устанавливайте таймаут в конструкторе HTTPСоединение, иначе сеанс пользователя может "зависнуть" до ответа ОС.
  3. Обработка ошибок: Всегда анализируйте КодСостояния. Код 401 означает проблемы с токеном, 403 — отсутствие прав, 404 — объект не найден, 500 — ошибка на стороне сервера.
  4. Логирование: При отладке полезно использовать инструменты тестирования HTTP сервисов, сохранять полученную строку JSON во временный файл или выводить в консоль, чтобы понять структуру данных, которую вернул сервис.

Таким образом, мы рассмотрели полный цикл взаимодействия 1С с REST-сервисом: от настройки защищенного канала до парсинга ответа. Используя объекты HTTPСоединение и ЧтениеJSON, вы можете интегрировать 1С практически с любым современным веб-приложением.

← На главную