В современной разработке на платформе 1С:Предприятие 8.3 интеграция с внешними системами через REST API является одной из наиболее востребованных задач. Для тех, кто хочет освоить эту тему с нуля, отлично подойдет интерактивный обучающий курс по работе с HTTP-запросами, охватывающий основы методов GET, POST и работу с заголовками. Чаще всего обмен происходит с использованием протокола HTTP и формата данных JSON. В рамках данной статьи мы подробно разберем, как правильно настроить подключение к внешнему серверу, сформировать запрос и корректно обработать полученный ответ.
Первым шагом в реализации обмена является создание объекта HTTPСоединение. Этот объект отвечает за установку сессии с удаленным сервером. Проанализируем параметры, которые нам понадобятся для инициализации соединения. Нам необходимо знать адрес сервера (хост), порт (обычно 80 для HTTP или 443 для HTTPS), а также учетные данные, если сервер требует авторизации. Например, при работе с облачными хранилищами часто реализуется интеграция 1С с Google Таблицами через сервисный аккаунт, где параметры подключения играют критическую роль в безопасности данных — для этого подойдёт обработка выгрузки данных 1С через REST API.
Рассмотрим пример создания защищенного соединения через SSL:
// Определяем параметры подключения
Сервер = "api.example.com";
Порт = 443;
Пользователь = "admin";
Пароль = "password123";
// Используем защищенное соединение (SSL)
ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL();
// Создаем объект соединения
Соединение = Новый HTTPСоединение(Сервер, Порт, Пользователь, Пароль, , 30, ЗащищенноеСоединение);
В данном примере мы используем объект ЗащищенноеСоединениеOpenSSL, что позволяет работать с протоколом HTTPS. Параметр 30 устанавливает таймаут соединения в секундах, что важно для предотвращения зависания системы при недоступности внешнего ресурса.
После того как соединение установлено, нам необходимо подготовить сам запрос. Для этого используется объект HTTPЗапрос. Выясним причину, по которой важно правильно заполнять заголовки запроса: именно через них сервер понимает, в каком формате мы передаем данные и какую авторизацию используем. В специфических случаях, например для работы с маркетплейсами приложений, может потребоваться подпись RSA с хешированием SHA512 для получения токена RuStore, что реализуется путем передачи зашифрованных данных в заголовках или теле запроса.
Разберем по шагам процесс подготовки запроса для метода POST:
HTTPЗапрос и указываем адрес ресурса (путь к API).Content-Type (тип передаваемого контента).Посмотрим на пример кода, где мы формируем JSON-тело запроса:
// Указываем путь к методу API
АдресРесурса = "/v1/data/send";
Запрос = Новый HTTPЗапрос(АдресРесурса);
// Устанавливаем заголовки
Запрос.Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");
// Формируем данные в формате Структура
ДанныеДляОтправки = Новый Структура;
ДанныеДляОтправки.Вставить("Артикул", "ABC-123");
ДанныеДляОтправки.Вставить("Количество", 10);
// Сериализуем структуру в JSON
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, ДанныеДляОтправки);
СтрокаJSON = ЗаписьJSON.Закрыть();
// Устанавливаем тело запроса
Запрос.УстановитьТелоИзСтроки(СтрокаJSON, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
Обратите внимание на объект ЗаписьJSON. Это эффективный способ преобразования объектов 1С (таких как Структура или Массив) в формат JSON, понятный внешним системам.
Теперь, когда объект запроса готов, нам нужно отправить его через созданное ранее соединение. Результатом выполнения метода ОтправитьДляОбъекта или ВызватьHTTPМетод будет объект HTTPОтвет. Нам важно проанализировать код состояния ответа, чтобы убедиться, что операция прошла успешно (код 200 или 201). Практическим примером может служить обмен с сайтом для создания счета через POST запрос, где в ответе возвращается номер документа из внешней системы.
Попытка
Ответ = Соединение.ВызватьHTTPМетод("POST", Запрос);
// Проверяем статус ответа
Если Ответ.КодСостояния = 200 Тогда
Сообщить("Данные успешно отправлены!");
Иначе
Сообщить("Ошибка при отправке. Код состояния: " + Ответ.КодСостояния);
Возврат;
КонецЕсли;
Исключение
Сообщить("Не удалось установить соединение с сервером: " + ОписаниеОшибки());
Возврат;
КонецПопытки;
Чаще всего сервер возвращает данные также в формате JSON. Разберем подробнее, как преобразовать эту строку обратно в объекты 1С для дальнейшей работы в программе. Для этого мы применим объект ЧтениеJSON.
Рассмотрим алгоритм обработки полученного текста:
// Получаем тело ответа в виде строки
СтрокаОтвета = Ответ.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8);
// Инициализируем чтение JSON
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(СтрокаОтвета);
// Десериализуем данные в структуру 1С
Результат = ПрочитатьJSON(ЧтениеJSON);
ЧтениеJSON.Закрыть();
// Теперь мы можем работать с данными как с обычной структурой
Если Результат.Свойство("status") И Результат.status = "success" Тогда
ИдентификаторЗаписи = Результат.id;
Сообщить("Сервер присвоил ID: " + ИдентификаторЗаписи);
КонецЕсли;
Использование метода ПрочитатьJSON позволяет автоматически преобразовать типы данных: строки станут строками, числа — числами, а вложенные объекты JSON — вложенными структурами или массивами 1С.
Проанализируем ситуацию, когда объем передаваемых данных велик. В таких случаях чтение и запись через строки может привести к избыточному потреблению оперативной памяти. Вместо методов УстановитьСтроку и ПолучитьТелоКакСтроку рекомендуется использовать работу с файлами или потоками. Если вы планируете строить сложную архитектуру обмена, обратите внимание на универсальный модуль для создания HTTP-сервисов (удобнее через модуль обмена между базами 1С по HTTP), который помогает стандартизировать обработку входящих и исходящих потоков данных.
Например, можно сохранить ответ сервера сразу в файл:
ИмяФайлаОтвета = ПолучитьИмяВременногоФайла("json");
Соединение.Получить(Запрос, ИмяФайлаОтвета);
// Затем открываем файл для чтения JSON
ЧтениеJSON.ОткрытьФайл(ИмяФайлаОтвета);
Результат = ПрочитатьJSON(ЧтениеJSON);
ЧтениеJSON.Закрыть();
Важный момент: всегда следите за кодировкой. Стандартом для JSON является UTF-8. При использовании метода УстановитьТелоИзСтроки всегда явно указывайте КодировкаТекста.UTF8, чтобы избежать проблем с кириллическими символами. Для более продвинутых сценариев, требующих мгновенной передачи данных, может потребоваться использование WebSocket прокси для REST API, что позволяет обойти ограничения классической HTTP-модели.
Мы рассмотрели полный цикл работы с HTTP-запросами в 1С: от настройки HTTPСоединение до парсинга JSON-ответа с помощью ЧтениеJSON. Понимание этих механизмов позволяет интегрировать 1С практически с любым современным веб-сервисом, будь то государственные информационные системы, маркетплейсы или внутренние API компании. Помните о необходимости корректной обработки исключений через блок Попытка...Исключение, чтобы ваша интеграция была отказоустойчивой. Для централизованного контроля обмена есть система управления интеграциями и маршрутами JSON.