Как работать с WEB-сервисами и HTTP-сервисами в 1С и в чем их принципиальное отличие?

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

В современной разработке на платформе 1С:Предприятие 8 интеграция с внешними системами является одной из самых частых задач. Однако новички часто путают понятия «Web-сервис» и «HTTP-сервис». Давайте подробно разберем, чем они отличаются, какие механизмы платформы используются для каждого из них и как правильно написать программный код для обмена данными.

Понимаем разницу: SOAP против REST

Для начала разберем терминологическую путаницу. В экосистеме 1С сложилось четкое разделение:

  1. Web-сервисы — это реализация протокола SOAP (Simple Object Access Protocol). В основе лежит строгий формат XML и описание интерфейса через WSDL. Это «тяжеловесный» стандарт со строгой типизацией.
  2. HTTP-сервисы — это инструмент для создания REST-интерфейсов (Representational State Transfer). Здесь мы работаем напрямую с HTTP-протоколом, используя методы GET, POST, PUT, DELETE, и чаще всего передаем данные в формате JSON.

Проанализируем ситуацию: если вам нужно подключиться к государственному сервису (ФНС, Честный знак) или старому корпоративному порталу, скорее всего, это будет SOAP. Если же вы интегрируетесь с современным API (Telegram, маркетплейсы, банковские приложения), вы столкнетесь с HTTP-сервисами.

Работа с Web-сервисами (SOAP) в 1С

Особенность работы с SOAP в 1С заключается в использовании механизма XDTO (XML Data Transfer Objects). Платформа автоматически преобразует XML-пакеты в объекты 1С и обратно. Рассмотрим два способа подключения.

Способ 1: Статическое использование (WS-ссылки)

Мы можем добавить объект WSСсылка прямо в дерево конфигурации. Для этого достаточно указать URL к WSDL-файлу. Платформа сама импортирует структуру типов. После этого обращение к сервису выглядит как работа с обычным объектом 1С.

Способ 2: Динамическое подключение через WSПрокси

Если нам нужно подключаться к сервису «на лету» (например, адрес сервиса хранится в настройках), мы используем программное создание прокси. Рассмотрим пример кода:


// 1. Создаем определение сервиса на основе WSDL
Определения = Новый WSОпределения("http://www.service-url.com/api?wsdl", "Логин", "Пароль");

// 2. Создаем прокси-объект
// Параметры: Определения, ПространствоИмен, ИмяСервиса, ИмяТочкиПодключения
Прокси = Новый WSПрокси(Определения, "http://www.service-namespace.com", "ExchangeService", "ExchangeServiceSoap");
Прокси.Пользователь = "Логин";
Прокси.Пароль = "Пароль";

// 3. Вызываем метод сервиса
Результат = Прокси.GetData(Параметр1, Параметр2);

Выясним причину, почему это удобно: строгая типизация. Если сервис ожидает число, а вы передадите строку, ошибка возникнет еще на этапе формирования пакета в 1С, а не на стороне сервера.

Работа с HTTP-сервисами (REST/JSON)

Работа с HTTP-сервисами более гибкая, но требует ручной обработки тела запроса. Здесь мы не привязаны к XDTO и можем формировать любые заголовки. Разберем по шагам стандартный процесс обмена через HTTPСоединение.

Рассмотрим пример отправки POST-запроса с данными в формате JSON:


// 1. Устанавливаем соединение
Соединение = Новый HTTPСоединение("api.external-system.ru", 443, , , , , Новый ЗащищенноеСоединениеOpenSSL());

// 2. Формируем тело запроса (JSON)
ДанныеДляОтправки = Новый Структура;
ДанныеДляОтправки.Вставить("id", "123");
ДанныеДляОтправки.Вставить("status", "processed");

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

// 3. Подготавливаем запрос
Запрос = Новый HTTPЗапрос("/v1/update");
Запрос.Заголовки.Вставить("Content-Type", "application/json");
Запрос.УстановитьТелоИзСтроки(СтрокаJSON);

// 4. Выполняем и анализируем ответ
Ответ = Соединение.ВызватьHTTPМетод("POST", Запрос);

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

В данном примере мы использовали объекты HTTPСоединение, HTTPЗапрос и HTTPОтвет. Обратите внимание на важность обработки кодов состояния: 200–299 означают успех, 400 — ошибку в ваших данных, 500 — проблему на сервере.

Автоматический REST: Стандартный интерфейс OData

Проанализируем ситуацию, когда нам нужно быстро дать доступ к данным 1С внешней системе, не создавая свои сервисы. В платформе 1С существует Стандартный интерфейс OData. Это встроенный REST-интерфейс, который позволяет читать, создавать и удалять данные в базе через обычные HTTP-запросы.

Для активации этого механизма выполните следующие действия:

  1. В свойствах конфигурации найдите пункт «Использовать стандартный интерфейс OData» и установите флаг.
  2. Опубликуйте информационную базу на веб-сервере (IIS или Apache).
  3. Настройте состав объектов, доступных через OData (через встроенный язык или в диалоге публикации).

Теперь данные доступны по URL вида: http://server/base/odata/standard.odata/Catalog_Контрагенты. Это мощный инструмент, который экономит сотни часов разработки.

Инструменты для отладки

При разработке интеграций крайне сложно увидеть, что именно происходит «под капотом» 1С. Разберем инструменты, которые помогут вам сэкономить время:

Безопасность и SSL-сертификаты

При работе через HTTPS (порт 443) 1С проверяет валидность сертификата сервера. Если вы работаете с самоподписанным сертификатом или сертификатом, выданным внутренним центром сертификации, платформа выдаст ошибку соединения.

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

Подведем итог: для строгих корпоративных обменов выбираем Web-сервисы (SOAP), для легких интеграций с веб-приложениями — HTTP-сервисы (REST). Использование встроенных объектов платформы позволяет реализовать практически любой сценарий обмена данными с минимальными затратами ресурсов.

← На главную