В современной разработке на платформе 1С часто возникает задача взаимодействия с внешними информационными системами (например, синхронизация с Google календарем). Будь то государственные сервисы (например, Росреестр), распознавание документов, CRM-системы (Bitrix24), сервисы телефонии или корпоративные порталы — основным протоколом обмена данными сегодня является REST. В этой статье мы подробно разберем, как правильно организовать передачу и получение данных, настроить авторизацию и обработать ответы в формате JSON. Для этой задачи есть инструмент автоматической выгрузки из СКД во внешние системы по REST.
Для начала проанализируем ситуацию: в 1С существует два аспекта работы с REST. Первый — это внутренний REST-интерфейс (OData), который позволяет сторонним приложениям обращаться к данным вашей базы. Второй — это использование 1С в качестве HTTP-клиента для обращения к внешним веб-сервисам. Рассмотрим подробнее именно второй вариант, так как он чаще всего вызывает вопросы у разработчиков.
Для взаимодействия с внешними сервисами в языке 1С используются основные объекты: HTTPСоединение, HTTPЗапрос и HTTPОтвет. Эти инструменты позволяют гибко настраивать параметры соединения, передавать заголовки авторизации и получать тело ответа для дальнейшей обработки.
Большинство современных сервисов работают по протоколу HTTPS. Поэтому первым делом мы должны создать объект защищенного соединения. Проанализируем пример кода для инициализации связи с сервером:
// Настройка защищенного соединения (OpenSSL)
Защита = Новый ЗащищенноеСоединениеOpenSSL();
// Указываем хост сервера. Обратите внимание: протокол "https://" в строке хоста не пишется!
Хост = "rosreestr.ru.net";
// Создаем соединение. Таймаут лучше ставить с запасом (30-60 сек)
Соединение = Новый HTTPСоединение(Хост, , , , , 60, Защита);
При создании HTTPСоединение важно помнить, что первый параметр — это только имя домена. Если вы укажете полный URL с путем, система выдаст ошибку. Весь путь к конкретному методу API мы будем прописывать в объекте запроса.
Разберем, как передать данные серверу. Большинство 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 вам нужно получить токен в личном кабинете разработчика соответствующего сервиса.
После выполнения метода Получить() или ОтправитьДляОбработки(), мы получаем объект HTTPОтвет. Нам необходимо проверить, успешно ли прошел запрос, и извлечь данные. Проанализируем ситуацию на примере получения списка пользователей из внешней CRM (поможет модуль обмена данными между amoCRM и 1С через API):
Результат = Соединение.Получить(Запрос);
// Проверяем код состояния (200 - ОК)
Если Результат.КодСостояния = 200 Тогда
// Получаем тело ответа в виде строки
СтрокаJSON = Результат.ПолучитьТелоКакСтроку();
// Десериализуем JSON в структуру 1С
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(СтрокаJSON);
Данные = ПрочитатьJSON(ЧтениеJSON);
ЧтениеJSON.Закрыть();
// Теперь мы можем работать с данными как с обычной структурой или массивом
Для Каждого Объект Из Данные.result Цикл
Сообщить("Найдено: " + Объект.NAME);
КонецЦикла;
Иначе
Сообщить("Ошибка запроса! Код состояния: " + Результат.КодСостояния);
Сообщить("Текст ошибки: " + Результат.ПолучитьТелоКакСтроку());
КонецЕсли;
Если задача стоит не только получить данные (GET), но и отправить их (POST), нам нужно подготовить тело запроса. Посмотрим на примере интеграции с Bitrix24 (для этого есть модуль интеграции 1С и Bitrix24), как отправить данные в формате строки параметров:
АдресМетода = "/rest/user.search";
ТелоЗапроса = "USER_TYPE=employee&LAST_NAME=Иванов";
Запрос = Новый HTTPЗапрос(АдресМетода);
Запрос.УстановитьТелоИзСтроки(ТелоЗапроса, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
// Для POST-запросов часто используется метод ОтправитьДляОбработки или ВызватьHTTPМетод("POST")
Результат = Соединение.ОтправитьДляОбработки(Запрос);
При работе с REST в 1С рекомендуем придерживаться следующих правил:
КодироватьСтроку(), чтобы избежать ошибок в пути запроса.HTTPСоединение, иначе сеанс пользователя может "зависнуть" до ответа ОС.КодСостояния. Код 401 означает проблемы с токеном, 403 — отсутствие прав, 404 — объект не найден, 500 — ошибка на стороне сервера.Таким образом, мы рассмотрели полный цикл взаимодействия 1С с REST-сервисом: от настройки защищенного канала до парсинга ответа. Используя объекты HTTPСоединение и ЧтениеJSON, вы можете интегрировать 1С практически с любым современным веб-приложением.