В современной разработке на платформе 1С:Предприятие 8.3 интеграция с внешними системами через REST API является одной из наиболее частых задач. Чаще всего обмен данными происходит с использованием протокола HTTP и формата JSON. В данной статье мы подробно разберем, как правильно сконструировать POST-запрос, подготовить данные и обработать результат, полученный от сервера.
Для реализации обмена данными в 1С используются встроенные объекты. Проанализируем ключевые из них, которые понадобятся нам в работе:
HTTPСоединение — основной объект, устанавливающий сессию с сервером.HTTPЗапрос — объект, в котором формируются адрес ресурса, заголовки и тело самого запроса.HTTPОтвет — объект, содержащий данные, пришедшие от сервера после выполнения запроса.ЗаписьJSON и СериализаторXDTO — инструменты для формирования текстового сообщения в формате JSON.Рассмотрим ситуацию, когда нам необходимо передать структуру данных на сервер. Прежде всего, выясним причину, по которой данные нельзя передавать «как есть». Протокол HTTP работает с текстовыми данными, поэтому любой объект 1С (Структура, Соответствие, Таблица значений) должен быть сериализован в строку JSON.
Посмотрим на пример создания строки JSON из структуры:
ДанныеДляОтправки = Новый Структура;
ДанныеДляОтправки.Вставить("ИмяКлиента", "Иван Иванов");
ДанныеДляОтправки.Вставить("НомерЗаказа", 125);
ДанныеДляОтправки.Вставить("Дата", Формат(ТекущаяДата(), "ДФ=yyyy-MM-dd"));
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, ДанныеДляОтправки);
СтрокаJSON = ЗаписьJSON.Закрыть();
Важно помнить, что при использовании ЗаписатьJSON типы данных 1С автоматически конвертируются в соответствующие типы JSON (числа, строки, булево). Однако сложные типы, такие как Дата или УникальныйИдентификатор, требуют предварительного форматирования.
Теперь разберем по шагам создание самого запроса. Нам нужно указать относительный путь к ресурсу (URL без адреса сервера) и установить технические заголовки. Самый важный заголовок при отправке JSON — это Content-Type.
Проанализируем пример настройки запроса:
Запрос = Новый HTTPЗапрос("/api/v1/orders/create");
Запрос.Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");
Запрос.УстановитьТелоИзСтроки(СтрокаJSON, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
Обратите внимание на параметр ИспользованиеByteOrderMark.НеИспользовать. В большинстве современных веб-сервисов наличие BOM-метки в начале строки может вызвать ошибку парсинга, поэтому рекомендуем ее отключать.
Выясним, как правильно создать HTTPСоединение. Нам понадобятся адрес сервера, порт и, при необходимости, данные для авторизации. Рассмотрим пример кода:
Сервер = "api.myservice.com";
Порт = 443; // Используем 443 для HTTPS
Пользователь = "admin";
Пароль = "secret_password";
// Для безопасного соединения используем защищенное соединение OpenSSL
ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL();
Соединение = Новый HTTPСоединение(Сервер, Порт, Пользователь, Пароль, , 30, ЗащищенноеСоединение);
Попытка
Ответ = Соединение.ОтправитьДляОбработки(Запрос); // Это метод POST
Исключение
Сообщить("Ошибка связи: " + ОписаниеОшибки());
Возврат;
КонецПопытки;
В данном примере мы установили таймаут 30 секунд. Это важный момент: если сервер отвечает долго, 1С может «зависнуть» до получения ответа или системной ошибки. Всегда ограничивайте время ожидания.
После выполнения метода ОтправитьДляОбработки мы получаем объект HTTPОтвет. Нам необходимо проверить код состояния и проанализировать тело ответа. Разберем типичные коды:
Посмотрим, как считать полученный JSON обратно в структуру 1С:
Если Ответ.КодСостояния = 200 Тогда
СтрокаОтвета = Ответ.ПолучитьТелоКакСтроку();
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(СтрокаОтвета);
Результат = ПрочитатьJSON(ЧтениеJSON);
ЧтениеJSON.Закрыть();
// Теперь можем обращаться к данным: Результат.status, Результат.id и т.д.
Сообщить("Успешно создан заказ №" + Результат.id);
Иначе
Сообщить("Ошибка сервера. Код: " + Ответ.КодСостояния);
Сообщить("Текст ошибки: " + Ответ.ПолучитьТелоКакСтроку());
КонецЕсли;
Проанализировав практику разработки, выделим несколько советов для стабильной работы обмена:
УстановитьТелоИзСтроки используйте запись во временный файл и метод УстановитьТелоИзФайла. Это значительно снизит потребление оперативной памяти.ЗащищенноеСоединениеOpenSSL необходимо передать соответствующие параметры для игнорирования проверок (хотя это не рекомендуется для рабочих систем).Мы рассмотрели полный цикл работы с HTTP-запросами. Использование связки HTTPСоединение + ЗаписьJSON является наиболее современным и производительным способом организации обмена данными в среде 1С. Тщательно проверяйте заголовки и всегда обрабатывайте исключительные ситуации, чтобы ваше решение было отказоустойчивым.