В современной разработке на платформе 1С:Предприятие 8.3 интеграция с внешними системами через REST API является одной из самых приоритетных задач. В данной статье мы подробно разберем, как организовать взаимодействие с внешними ресурсами, используя встроенные механизмы платформы. Мы проанализируем основные объекты, такие как HTTPСоединение, HTTPЗапрос и HTTPОтвет, и научимся правильно обрабатывать данные в формате JSON.
Прежде чем переходить к написанию кода, давайте разберем, какие инструменты предоставляет нам платформа. Для любого взаимодействия с веб-сервисом нам понадобятся три ключевых звена:
Content-Type) и наполняем тело запроса данными.Рассмотрим ситуацию, когда нам необходимо получить данные от внешнего сервиса. Проанализируем пример кода, который позволяет запросить информацию о курсах валют или погоде. Выясним причину, по которой важно правильно указывать ресурс.
// Создаем соединение с сервером
Сервер = "api.externalservice.com";
Соединение = Новый HTTPСоединение(Сервер, 443, , , , , Новый ЗащищенноеСоединениеOpenSSL());
// Формируем запрос
Ресурс = "/v1/data/get_info?id=123";
Запрос = Новый HTTPЗапрос(Ресурс);
Запрос.Заголовки.Вставить("Accept", "application/json");
// Выполняем запрос
Попытка
Ответ = Соединение.Получить(Запрос);
Если Ответ.КодСостояния = 200 Тогда
Сообщить("Данные успешно получены!");
ТекстОтвета = Ответ.ПолучитьТелоКакСтроку();
// Далее следует разбор JSON
Иначе
Сообщить("Ошибка сервера. Код состояния: " + Ответ.КодСостояния);
КонецЕсли;
Исключение
Сообщить("Не удалось установить соединение: " + ОписаниеОшибки());
КонецПопытки;
В данном примере мы используем ЗащищенноеСоединениеOpenSSL, так как большинство современных сервисов работают по протоколу HTTPS. Обратите внимание, что мы проверяем КодСостояния. Это критически важно для корректной работы алгоритма: код 200 означает успех, тогда как коды 4xx и 5xx сигнализируют о проблемах на стороне клиента или сервера.
Теперь разберем более сложную задачу: нам нужно отправить данные из 1С во внешнюю систему. Чаще всего для этого используется метод POST, а данные передаются в теле запроса в формате JSON. Проанализируем этот процесс по шагам.
Для начала нам нужно подготовить данные. Мы будем использовать объект ЗаписьJSON для сериализации структуры 1С в строку.
// Подготовка данных для отправки
ДанныеОбъекта = Новый Структура;
ДанныеОбъекта.Вставить("Наименование", "Тестовый товар");
ДанныеОбъекта.Вставить("Артикул", "A123BC");
ДанныеОбъекта.Вставить("Цена", 1500);
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, ДанныеОбъекта);
СтрокаJSON = ЗаписьJSON.Закрыть();
// Настройка соединения и запроса
Сервер = "api.externalservice.com";
Соединение = Новый HTTPСоединение(Сервер, , , , , , Новый ЗащищенноеСоединениеOpenSSL());
Ресурс = "/v1/objects/create";
Запрос = Новый HTTPЗапрос(Ресурс);
Запрос.Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");
Запрос.УстановитьТелоИзСтроки(СтрокаJSON, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
// Отправка POST-запроса
Ответ = Соединение.ОтправитьДляОбъекта(Запрос);
Если Ответ.КодСостояния = 201 Тогда
Сообщить("Объект успешно создан в сторонней системе.");
КонецЕсли;
Рассмотрим подробнее использование метода УстановитьТелоИзСтроки. Мы явно указываем кодировку UTF8 и отключаем ByteOrderMark (BOM), так как многие веб-серверы некорректно воспринимают наличие метки порядка байтов в начале JSON-пакета, что может привести к ошибке десериализации на стороне сервера.
После того как мы получили HTTPОтвет, нам необходимо преобразовать текстовые данные обратно в объекты 1С (Структуры и Массивы). Посмотрим на пример, как это сделать эффективно с помощью функции ПрочитатьJSON.
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку());
Результат = ПрочитатьJSON(ЧтениеJSON);
ЧтениеJSON.Закрыть();
// Теперь мы можем обращаться к данным как к полям структуры
Для Каждого Элемент Из Результат.items Цикл
Сообщить("Получен ID: " + Элемент.id);
КонецЦикла;
Этот подход позволяет нам работать с данными динамически. Проанализируем ситуацию, когда структура JSON может меняться: использование универсальных механизмов чтения 1С позволяет коду оставаться гибким и устойчивым к изменениям на стороне внешнего API.
В процессе реализации взаимодействия часто возникают типовые проблемы. Разберем наиболее частые из них:
HTTPСоединение (параметр Таймаут).Content-Type: application/json при отправке данных.Authorization со значением "Bearer " + Токен.Посмотрим на пример добавления авторизации:
Токен = "your_secret_token_here";
Запрос.Заголовки.Вставить("Authorization", "Bearer " + Токен);
Мы проанализировали полный цикл работы с HTTP-запросами в 1С. Мы научились создавать защищенное соединение, формировать запросы с необходимыми заголовками и телом, а также обрабатывать ответы сервера. Использование встроенных объектов HTTPСоединение и ЗаписьJSON делает код чистым, производительным и легким в поддержке. Применяя данные инструкции, вы сможете интегрировать вашу базу 1С практически с любым современным веб-сервисом или мобильным приложением.