В современной разработке на платформе 1С:Предприятие 8.3 интеграция с внешними веб-сервисами стала повседневной задачей. Чаще всего это реализуется через HTTP-запросы. В данной статье мы подробно разберем, как правильно настроить соединение с сервером, сформировать тело запроса в формате JSON, отправить его и корректно обработать полученный ответ. Мы проанализируем основные объекты платформы, такие как HTTPСоединение, HTTPЗапрос и HTTPОтвет, а также выясним причины типичных ошибок при работе с протоколом HTTPS.
Первым делом нам необходимо установить связь с удаленным сервером. Для этого в 1С используется объект HTTPСоединение. Важно помнить, что при инициализации соединения мы указываем только базовый адрес сервера (хост), а не полный путь к ресурсу.
Рассмотрим подробнее параметры конструктора. Если сервер использует защищенное соединение (HTTPS), нам обязательно потребуется создать объект ЗащищенноеСоединениеOpenSSL. Разберем это на примере:
// Настройка защищенного соединения для HTTPS
Защита = Новый ЗащищенноеСоединениеOpenSSL();
// Указываем адрес сервера без префикса http/https и без путей
Сервер = "api.example.com";
Порт = 443; // Стандартный порт для HTTPS
// Создаем объект соединения
Соединение = Новый HTTPСоединение(Сервер, Порт, , , , 30, Защита);
В данном коде параметр 30 означает таймаут в секундах. Это время, в течение которого система будет ожидать ответа от сервера. Проанализируем ситуацию: если сервер работает медленно, слишком короткий таймаут приведет к ошибке выполнения операции. Поэтому для тяжелых запросов рекомендуется увеличивать это значение.
Большинство современных REST-сервисов принимают данные в формате JSON. Для формирования такой строки в 1С удобнее всего использовать объекты Структура и ЗаписьJSON. Посмотрим на пример создания структуры данных для отправки:
ДанныеДляОтправки = Новый Структура;
ДанныеДляОтправки.Вставить("id", "123");
ДанныеДляОтправки.Вставить("наименование", "Товар №1");
ДанныеДляОтправки.Вставить("количество", 10);
Запись = Новый ЗаписьJSON;
Запись.УстановитьСтроку();
ЗаписатьJSON(Запись, ДанныеДляОтправки);
СтрокаJSON = Запись.Закрыть();
Этот метод гарантирует, что все специальные символы будут экранированы правильно, а типы данных (числа, булево, строки) будут соответствовать стандарту JSON. Выясним причину, почему не стоит собирать JSON "вручную" через конкатенацию строк: любая лишняя запятая или кавычка сделает ваш запрос невалидным для принимающей стороны.
Теперь создадим сам объект запроса и укажем путь к конкретному методу API (endpoint). Очень важно правильно установить заголовки запроса, в частности Content-Type, чтобы сервер понимал, что мы прислали именно JSON.
Разберем по шагам процесс настройки объекта HTTPЗапрос:
// Указываем путь к ресурсу относительно корня сервера
ПутьКРесурсу = "/v1/products/create";
Запрос = Новый HTTPЗапрос(ПутьКРесурсу);
// Устанавливаем заголовки
Запрос.Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");
// Если требуется авторизация по токену
Запрос.Заголовки.Вставить("Authorization", "Bearer " + ТокенДоступа);
// Помещаем тело в запрос
Запрос.УстановитьТелоИзСтроки(СтрокаJSON, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
Обратите внимание на параметр ИспользованиеByteOrderMark.НеИспользовать. Многие веб-серверы некорректно обрабатывают метку BOM в начале строки, что приводит к ошибкам парсинга. Мы рекомендуем всегда отключать BOM при отправке строковых данных.
Когда объект запроса готов, мы вызываем метод соединения. В зависимости от типа операции это может быть ВызватьHTTPМетод, ОтправитьДляОбъекта или специальные методы типа Получить (GET) и Отправить (POST).
Рассмотрим пример отправки POST-запроса и обработки результата:
Попытка
Ответ = Соединение.ВызватьHTTPМетод("POST", Запрос);
// Проанализируем код состояния
КодСостояния = Ответ.КодСостояния;
Если КодСостояния = 200 ИЛИ КодСостояния = 201 Тогда
// Успех, читаем тело ответа
ТелоОтвета = Ответ.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8);
// Разберем JSON ответа в структуру 1С
Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(ТелоОтвета);
РезультатСтуктура = ПрочитатьJSON(Чтение);
Чтение.Закрыть();
Сообщить("Запрос выполнен успешно! ID записи: " + РезультатСтуктура.id);
Иначе
Сообщить("Ошибка сервера. Код ответа: " + КодСостояния);
Сообщить("Текст ошибки: " + Ответ.ПолучитьТелоКакСтроку());
КонецЕсли;
Исключение
// Обработка сетевых ошибок (сервер недоступен, ошибка SSL и т.д.)
Сообщить("Произошла ошибка при установке соединения: " + ОписаниеОшибки());
КонецПопытки;
При работе с HTTP в 1С часто возникают ситуации, требующие особого внимания. Рассмотрим подробнее наиболее важные из них:
ЗащищенноеСоединениеOpenSSL необходимо настроить проверку сертификатов, либо (в целях отладки) использовать параметры для игнорирования ошибок проверки, хотя это не рекомендуется для рабочих систем.HTTPСоединение. Используйте для этого объект ИнтернетПрокси.УстановитьТелоИзСтроки используйте УстановитьТелоИзПотока. Это позволит избежать переполнения оперативной памяти.Мы проанализировали полный цикл работы с HTTP-сервисами: от настройки защищенного канала связи до парсинга JSON-структур. Использование стандартных объектов 1С позволяет строить надежные и производительные системы интеграции, которые легко поддерживать и масштабировать.