В современной разработке на платформе 1С:Предприятие 8.3 интеграция с внешними веб-сервисами является одной из самых частых задач. Будь то обмен данными с маркетплейсами, государственными информационными системами или внутренними порталами компании, базовым механизмом выступает протокол HTTP. В данной статье мы проанализируем основные инструменты 1С для работы с веб-запросами, разберем по шагам процесс создания соединения и рассмотрим практические примеры кода для передачи и получения данных в формате JSON.
Для взаимодействия с внешними ресурсами платформа предоставляет три ключевых объекта. Разберем их назначение:
HTTPСоединение — отвечает за установку канала связи с сервером (параметры сервера, порт, таймаут, прокси, SSL).HTTPЗапрос — формирует структуру конкретного сообщения (адрес ресурса, заголовки, тело запроса).HTTPОтвет — объект, который возвращает сервер (код состояния, заголовки ответа, тело данных).Прежде чем приступать к кодингу, необходимо выяснить параметры целевого сервера: протокол (HTTP или HTTPS), адрес домена, необходимость авторизации и формат передаваемых данных.
Большинство современных API работают через протокол HTTPS. Рассмотрим, как правильно инициализировать HTTPСоединение с использованием защищенного протокола. Проанализируем ситуацию, когда нам требуется игнорировать проверку сертификатов или использовать специфическую версию протокола TLS.
// Создание объекта защищенного соединения
ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL(
Новый СертификатКлиентаWindows(),
Новый СертификатыУдостоверяющихЦентровWindows()
);
// Инициализация соединения
Сервер = "api.service.ru";
Порт = 443;
Таймаут = 30;
Соединение = Новый HTTPСоединение(
Сервер,
Порт,
"Логин",
"Пароль",
,
Таймаут,
ЗащищенноеСоединение
);
Важно помнить, что использование ЗащищенноеСоединениеOpenSSL является стандартом для работы с внешними ресурсами. Если вы работаете на операционной системе Linux, параметры инициализации сертификатов могут отличаться.
Метод GET обычно используется для получения информации. Рассмотрим подробнее, как сформировать запрос к ресурсу и получить ответ в виде строки. Допустим, нам нужно получить список товаров по API.
// Формируем адрес ресурса с параметрами
Ресурс = "/v1/products?category=electronics&limit=10";
Запрос = Новый HTTPЗапрос(Ресурс);
// Добавляем необходимые заголовки
Запрос.Заголовки.Вставить("Content-Type", "application/json");
Запрос.Заголовки.Вставить("Authorization", "Bearer token_string");
Попытка
Ответ = Соединение.Получить(Запрос);
Если Ответ.КодСостояния = 200 Тогда
ТекстОтвета = Ответ.ПолучитьТелоКакСтроку();
// Далее разберем, как десериализовать этот текст
Иначе
Сообщить("Ошибка сервера: " + Ответ.КодСостояния);
КонецЕсли;
Исключение
Сообщить("Ошибка связи: " + ОписаниеОшибки());
КонецПопытки;
Обратите внимание на использование блока Попытка...Исключение. Это критически важно при сетевом взаимодействии, так как сервер может быть недоступен или возникнуть сетевой сбой.
Метод POST используется для создания новых записей или передачи больших объемов данных. В 1С 8.3 работа с JSON реализована через специализированные объекты. Выясним причину, почему лучше использовать ЗаписьJSON, а не собирать строку вручную.
Разберем по шагам процесс создания структуры данных, её упаковку в JSON и отправку на сервер:
// 1. Подготовка данных в 1С (Структура или Соответствие)
ДанныеДляОтправки = Новый Структура;
ДанныеДляОтправки.Вставить("name", "Новый товар");
ДанныеДляОтправки.Вставить("price", 1500);
ДанныеДляОтправки.Вставить("article", "ABC-123");
// 2. Сериализация в JSON
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, ДанныеДляОтправки);
СтрокаJSON = ЗаписьJSON.Закрыть();
// 3. Формирование запроса
ЗапросPOST = Новый HTTPЗапрос("/v1/products/create");
ЗапросPOST.Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");
ЗапросPOST.УстановитьТелоИзСтроки(СтрокаJSON, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
// 4. Отправка
ОтветPOST = Соединение.ОтправитьДляОбработки(ЗапросPOST);
Если ОтветPOST.КодСостояния = 201 Тогда
Сообщить("Объект успешно создан");
Иначе
Сообщить("Код ошибки: " + ОтветPOST.КодСостояния);
Сообщить("Ответ сервера: " + ОтветPOST.ПолучитьТелоКакСтроку());
КонецЕсли;
Использование ИспользованиеByteOrderMark.НеИспользовать часто является обязательным требованием для REST-сервисов, так как наличие BOM-символов в начале JSON-строки может привести к ошибке парсинга на стороне сервера.
После получения строки ответа от сервера, её необходимо преобразовать обратно в объекты 1С (Структуры, Массивы). Посмотрим на пример использования объекта ЧтениеJSON.
// Допустим, переменная ТекстОтвета содержит JSON
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(ТекстОтвета);
// Преобразование JSON в структуру/массив 1С
РезультатОбмена = ПрочитатьJSON(ЧтениеJSON);
ЧтениеJSON.Закрыть();
// Пример обращения к данным
Если ТипЗнч(РезультатОбмена) = Тип("Структура") Тогда
Для Каждого Элемент Из РезультатОбмена Цикл
Сообщить(Элемент.Ключ + ": " + Элемент.Значение);
КонецЦикла;
КонецЕсли;
Метод ПрочитатьJSON автоматически распознает типы данных: числа становятся Число, строки — Строка, булевы значения — Булево, а массивы и объекты преобразуются в Массив и Структура соответственно.
Проанализируем ситуацию, когда запрос не проходит. Выясним причины наиболее распространенных проблем:
Authorization: Bearer [токен].ЗаписьJSON.Таймаут в объекте HTTPСоединение (по умолчанию часто стоит 30 секунд).Для повышения стабильности работы системы рекомендуем выполнять тяжелые HTTP-запросы в фоновых заданиях. Это позволит избежать "зависания" интерфейса пользователя. Разберем по шагам, как это реализовать:
ФоновыеЗадания.Выполнить() для запуска процесса.В завершение посмотрим на важность правильной кодировки. По умолчанию 1С использует UTF-8, что является стандартом для веба, но всегда проверяйте заголовки Content-Type, которые ожидает принимающая сторона.
Таким образом, мы рассмотрели полный цикл работы с HTTP-запросами в 1С. Понимание этих механизмов позволяет интегрировать систему 1С с любым современным веб-приложением, расширяя функциональность вашей конфигурации.