Как реализовать работу с HTTP-запросами в 1С 8.3: пошаговое руководство

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

В современной разработке на платформе 1С:Предприятие 8.3 интеграция с внешними веб-сервисами через HTTP-запросы стала стандартом. Будь то обмен данными с маркетплейсами, государственными информационными системами или внутренними API компании, программисту необходимо четко понимать механизмы работы с объектами HTTPСоединение и HTTPЗапрос. В рамках данной статьи мы детально проанализируем процесс создания запросов, передачи параметров и обработки полученных ответов.

Подготовка и создание HTTP-соединения

Прежде чем отправить запрос, нам необходимо установить связь с сервером. Для этого в платформе используется объект HTTPСоединение. Рассмотрим основные параметры, которые требуются для его инициализации. Важно помнить, что создание соединения — это ресурсозатратная операция, поэтому стоит продумать логику так, чтобы не создавать его в цикле без необходимости.

Проанализируем пример создания защищенного соединения (HTTPS), которое сегодня используется повсеместно:


Сервер = "api.service.ru";
Порт = 443; // Стандартный порт для HTTPS
Таймаут = 30; // Время ожидания ответа в секундах

// Если сервер требует SSL, создаем объект ЗащищенноеСоединениеOpenSSL
Защита = Новый ЗащищенноеСоединениеOpenSSL();

Соединение = Новый HTTPСоединение(Сервер, Порт, , , , Таймаут, Защита);

Разберем параметры подробнее. Первым делом мы указываем адрес сервера без протокола (без "https://"). Если требуется авторизация на уровне транспорта, мы можем передать логин и пароль в соответствующих параметрах конструктора. Использование объекта ЗащищенноеСоединениеOpenSSL позволяет 1С корректно работать с SSL-сертификатами сервера.

Формирование HTTP-запроса и работа с заголовками

После того как соединение подготовлено, нам нужно создать сам запрос. Объект HTTPЗапрос определяет путь к ресурсу (Endpoint) и содержит заголовки, которые сообщают серверу формат передаваемых данных, ключи API и другую служебную информацию.

Выясним, как правильно установить заголовки для работы с форматом JSON, который является наиболее популярным при обмене данными:


АдресРесурса = "/v1/data/get_info?id=123";
Запрос = Новый HTTPЗапрос(АдресРесурса);

// Устанавливаем заголовки
Запрос.Заголовки.Вставить("Content-Type", "application/json");
Запрос.Заголовки.Вставить("Authorization", "Bearer " + ТокенДоступа);
Запрос.Заголовки.Вставить("Accept", "application/json");

Обратите внимание на метод Вставить в коллекции заголовков. Параметр Content-Type крайне важен: если его не указать или указать неверно, сервер может вернуть ошибку 415 (Unsupported Media Type). Также мы часто передаем токены авторизации в заголовке Authorization.

Отправка POST-запроса с телом сообщения

Если для GET-запроса достаточно указать параметры в строке адреса, то для POST-запроса требуется передать данные в теле запроса. Рассмотрим ситуацию, когда нам нужно отправить структуру 1С, преобразованную в JSON-строку.

Выполним следующие шаги для подготовки тела запроса:

  1. Сформируем структуру с данными в 1С.
  2. Преобразуем структуру в строку JSON с помощью встроенных средств платформы.
  3. Установим полученную строку в тело запроса.

ДанныеДляОтправки = Новый Структура;
ДанныеДляОтправки.Вставить("Артикул", "ABC-123");
ДанныеДляОтправки.Вставить("Количество", 10);

ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, ДанныеДляОтправки);
СтрокаJSON = ЗаписьJSON.Закрыть();

// Устанавливаем тело запроса из строки в кодировке UTF-8
Запрос.УстановитьТелоИзСтроки(СтрокаJSON, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);

Использование метода УстановитьТелоИзСтроки позволяет избежать проблем с кодировкой. Мы рекомендуем всегда явно указывать КодировкаТекста.UTF8, так как это стандарт де-факто для веб-сервисов.

Выполнение запроса и получение ответа

Теперь, когда соединение и запрос готовы, мы переходим к самому главному — отправке данных на сервер. Для этого используются методы объекта HTTPСоединение, такие как Получить (для GET), ОтправитьДляОбработки (для POST), ВызватьHTTPМетод (для PUT, DELETE и других).

Проанализируем пример получения ответа и проверку кода состояния:


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

Важный момент: всегда оборачивайте вызов сетевых методов в конструкцию Попытка...Исключение. Сетевые сбои, отсутствие интернета или недоступность сервера — это штатные ситуации, которые программа должна обрабатывать корректно, не прерывая работу пользователя.

Парсинг JSON-ответа

Получив строку ответа от сервера, нам необходимо превратить ее обратно в объекты 1С (Структуры и Массивы), чтобы с данными можно было удобно работать в коде. Разберем, как это сделать максимально эффективно.


// Функция для парсинга JSON
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(ТелоОтвета);
РезультатСтруктура = ПрочитатьJSON(ЧтениеJSON);
ЧтениеJSON.Закрыть();

// Теперь мы можем обращаться к данным по именам ключей
Если РезультатСтруктура.Свойство("success") И РезультатСтруктура.success Тогда
    // Обработка успешного результата
    ДанныеСервера = РезультатСтруктура.data; // Здесь может быть массив или структура
КонецЕсли;

Использование метода ПрочитатьJSON автоматически конвертирует типы данных: числа в JSON станут числами в 1С, массивы — Массив, объекты — Структура. Это значительно упрощает разработку по сравнению с ручным разбором текста.

Практические советы по отладке

При разработке HTTP-интеграций часто возникают сложности с пониманием того, что именно уходит на сервер. Мы рекомендуем следующие приемы:

Таким образом, мы детально изучили полный цикл работы с внешними API. Последовательное применение объектов HTTPСоединение, HTTPЗапрос и механизмов JSON позволяет строить надежные и масштабируемые системы интеграции в экосистеме 1С.

← На главную