Как настроить отправку HTTP-запросов с JSON из 1С 8.3: полное руководство

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

В современной разработке на платформе 1С:Предприятие 8.3 интеграция с внешними веб-сервисами через REST API стала повседневной задачей. Часто программисты сталкиваются с необходимостью передать данные в формате JSON через POST-запрос или получить информацию с сервера, используя GET-запрос. В рамках данной статьи мы подробно разберем, как правильно выстроить архитектуру взаимодействия с внешним сервером, настроить защищенное соединение и обработать полученные результаты.

Организация HTTP-соединения

Прежде чем отправлять данные, нам необходимо установить связь с сервером. Для этого в платформе используется объект HTTPСоединение. Проанализируем основные параметры, которые требуются для его инициализации. Нам важно понимать, работает ли сервер через защищенный протокол (HTTPS) или обычный (HTTP). Если используется HTTPS, обязательно нужно создать объект ЗащищенноеСоединениеOpenSSL.

Рассмотрим пример создания безопасного соединения. Мы определим адрес сервера и создадим объект связи, который будет использоваться для всех последующих запросов:


Сервер = "api.example.com";
Порт = 443; // Стандартный порт для HTTPS
Защита = Новый ЗащищенноеСоединениеOpenSSL();

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

В данном коде мы установили таймаут 30 секунд. Это важный момент: если внешний сервис работает медленно, слишком короткий таймаут приведет к обрыву операции. Разберем по шагам параметры: Сервер — это доменное имя без префиксов "http://", а Защита обеспечивает шифрование трафика.

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

Любой запрос состоит из заголовков (headers) и тела (body). Для работы с JSON нам критически важно указать серверу тип передаваемого контента. Выясним, как это сделать с помощью объекта HTTPЗапрос. Мы должны добавить заголовок Content-Type со значением application/json, иначе сервер может не понять формат присланных данных.

Посмотрим на пример подготовки запроса для авторизации или передачи данных:


Запрос = Новый HTTPЗапрос("/v1/data/send");
Запрос.Заголовки.Вставить("Content-Type", "application/json");
Запрос.Заголовки.Вставить("Authorization", "Bearer " + ТокенДоступа);

Здесь мы указали относительный путь к ресурсу /v1/data/send. Если ваша интеграция требует авторизации по токену, мы добавляем его в заголовок Authorization. Это стандартная практика для большинства современных API.

Работа с данными в формате JSON

Теперь проанализируем процесс сериализации данных. В 1С для этого идеально подходят объекты ЗаписьJSON и СериализаторXDTO (или простая запись структур). Рассмотрим наиболее надежный способ формирования JSON из структуры 1С.


ДанныеДляОтправки = Новый Структура;
ДанныеДляОтправки.Вставить("ID", "001");
ДанныеДляОтправки.Вставить("Наименование", "Товар №1");
ДанныеДляОтправки.Вставить("Цена", 1500);

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

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

Использование ИспользованиеByteOrderMark.НеИспользовать крайне желательно, так как многие веб-серверы некорректно обрабатывают BOM (Byte Order Mark) в начале строки и возвращают ошибку 400 (Bad Request).

Отправка запроса и получение ответа

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


Попытка
    Ответ = Соединение.ВызватьHTTPМетод("POST", Запрос);
    КодСостояния = Ответ.КодСостояния;
    СтрокаОтвета = Ответ.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8);
Исключение
    Сообщить("Ошибка связи с сервером: " + ОписаниеОшибки());
    Возврат;
КонецПопытки;

Разберем подробнее коды состояний. Если КодСостояния равен 200 или 201, операция прошла успешно. Если мы получили 401 — ошибка авторизации, 404 — ресурс не найден, 500 — внутренняя ошибка сервера. Мы всегда должны проверять этот параметр перед тем, как пытаться обрабатывать СтрокуОтвета.

Десериализация JSON-ответа

После успешного получения данных нам нужно превратить строку JSON обратно в объекты 1С (Структуры или Массивы), чтобы с ними можно было работать в коде. Воспользуемся объектом ЧтениеJSON.


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

Рекомендации по обработке сложных структур

При работе с вложенными массивами и структурами в JSON важно помнить, что 1С автоматически преобразует массивы JSON в объект Массив, а объекты JSON — в Структура. Если во входящем JSON есть поля, имена которых недопустимы для ключей структуры 1С (например, содержат дефисы или начинаются с цифр), следует использовать Соответствие вместо структуры при чтении.

Рассмотрим по шагам, как прочитать JSON в Соответствие:

  1. Создаем объект ЧтениеJSON.
  2. Устанавливаем источник (строку или файл).
  3. Вызываем функцию ПрочитатьJSON, передав в параметрах указание на использование соответствий.

// Пример чтения в Соответствие для обработки нестандартных ключей
Результат = ПрочитатьJSON(Чтение, Ложь); // Второй параметр Ложь означает использование соответствий

Заключение и лучшие практики

Подводя итоги, выделим ключевые правила работы с HTTP в 1С:

Мы проанализировали полный цикл взаимодействия 1С с внешними системами. Следуя этим инструкциям, вы сможете реализовать надежную интеграцию любой сложности, будь то обмен данными с маркетплейсами, государственными информационными системами или внутренними порталами компании.

← На главную