В современной практике автоматизации бизнеса на платформе 1С:Предприятие 8.3 задачи по интеграции с внешними сервисами через REST API или Web-сервисы становятся стандартными требованиями. Чаще всего взаимодействие происходит по протоколу HTTP/HTTPS с использованием формата данных JSON. В рамках данной статьи мы подробно разберем, как правильно сконфигурировать подключение, сформировать запрос и корректно обработать полученную от сервера информацию.
Первым шагом в решении задачи является создание объекта HTTPСоединение. Этот объект отвечает за установку канала связи с сервером. Проанализируем основные параметры, которые необходимо указать при инициализации. Нам потребуются адрес сервера, порт и, в случае работы с защищенным протоколом, параметры ЗащищенноеСоединениеOpenSSL.
Рассмотрим пример создания безопасного соединения:
Сервер = "api.service.com";
Порт = 443; // Стандартный порт для HTTPS
Сертификат = Новый ЗащищенноеСоединениеOpenSSL();
Соединение = Новый HTTPСоединение(Сервер, Порт, , , , 30, Сертификат);
Здесь мы устанавливаем таймаут в 30 секунд, что является оптимальным для большинства внешних API. Если сервер требует авторизации, логин и пароль передаются в соответствующих параметрах конструктора HTTPСоединение.
После того как канал связи определен, нам необходимо создать сам HTTPЗапрос. Важно понимать, что объект запроса содержит путь к конкретному ресурсу (endpoint) и заголовки, которые сообщают серверу тип передаваемого контента и параметры аутентификации (например, Token).
Выясним причину, по которой запросы часто отклоняются сервером: чаще всего это отсутствие заголовка Content-Type. Разберем по шагам, как добавить необходимые метаданные:
ПутьКРесурсу = "/v1/data/get_info?id=123";
Запрос = Новый HTTPЗапрос(ПутьКРесурсу);
// Устанавливаем заголовки
Запрос.Заголовки.Вставить("Content-Type", "application/json");
Запрос.Заголовки.Вставить("Authorization", "Bearer " + ТокенДоступа);
Если мы выполняем POST запрос, нам также необходимо передать тело сообщения. Проанализируем ситуацию, когда данные для отправки хранятся в структуре 1С. В этом случае их нужно предварительно преобразовать в строку JSON.
Для работы с JSON в платформе предусмотрены объекты ЗаписьJSON и ПрочитатьJSON. Рассмотрим подробнее процесс сериализации структуры 1С в строку для отправки на сервер:
ДанныеДляОтправки = Новый Структура;
ДанныеДляОтправки.Вставить("Артикул", "00001");
ДанныеДляОтправки.Вставить("Количество", 10);
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, ДанныеДляОтправки);
СтрокаJSON = ЗаписьJSON.Закрыть();
Запрос.УстановитьТелоИзСтроки(СтрокаJSON, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
Важный момент: использование ИспользованиеByteOrderMark.НеИспользовать критично для многих современных веб-серверов, так как лишние символы в начале строки могут вызвать ошибку парсинга на стороне принимающего сервиса.
Теперь перейдем к выполнению самого запроса. Мы будем использовать метод ВызватьHTTPМетод или специализированные методы типа ОтправитьДляОбработки (для POST). Результатом выполнения будет объект HTTPОтвет, который содержит код состояния и тело ответа.
Посмотрим на пример обработки результата:
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
Если Ответ.КодСостояния = 200 Тогда
// Успешное выполнение
ТекстОтвета = Ответ.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8);
РазберемОтветСервера(ТекстОтвета);
Иначе
Сообщить("Ошибка при запросе: " + Ответ.КодСостояния);
КонецЕсли;
Код состояния 200 (OK) или 201 (Created) обычно свидетельствует об успехе. Коды 4xx и 5xx указывают на ошибки клиента или сервера соответственно.
Полученную строку JSON необходимо преобразовать обратно в объекты, с которыми удобно работать в коде (Структура, Соответствие или Массив). Для этого мы проанализируем использование функции ПрочитатьJSON.
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(ТекстОтвета);
РезультатСтруктура = ПрочитатьJSON(ЧтениеJSON);
ЧтениеJSON.Закрыть();
// Теперь мы можем обращаться к данным напрямую
Если РезультатСтруктура.Свойство("status") И РезультатСтруктура.status = "success" Тогда
// Выполняем дальнейшую логику
КонецЕсли;
Обратите внимание, что метод ПрочитатьJSON по умолчанию создает Структуру для объектов и Массив для списков. Если ключи в JSON содержат символы, недопустимые для имен свойств структуры 1С (например, дефисы), рекомендуется использовать второй параметр функции, чтобы получить Соответствие.
При работе с внешними системами всегда существует риск сетевых сбоев. Проанализируем, как сделать код более отказоустойчивым. Рекомендуется оборачивать вызовы сетевых методов в конструкцию Попытка ... Исключение.
Исключение с помощью функции ОписаниеОшибки().HTTPОтвет.ПолучитьЗаголовки(), чтобы увидеть, какие дополнительные данные прислал сервер (например, лимиты запросов).Использование связки HTTPСоединение и JSON позволяет интегрировать 1С практически с любым современным облачным сервисом, будь то мессенджеры, платежные системы или государственные информационные ресурсы. Следуя описанному выше структурному подходу, вы сможете создавать надежные и быстрые механизмы обмена данными.