Как организовать взаимодействие сайта с 1С через веб-сервисы или HTTP-сервисы?

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

Интеграция учетной системы 1С с внешними веб-сайтами — одна из самых частых задач в современной разработке. Будь то интернет-магазин, личный кабинет клиента или мобильное приложение, возникает вопрос: как правильно и максимально эффективно передать данные из 1С на сайт и обратно? В этой статье мы подробно разберем, какие инструменты предоставляет платформа 1С для этих целей, сравним традиционные веб-сервисы (SOAP) и современные HTTP-сервисы, а также изучим технические нюансы, влияющие на производительность и безопасность.

Выбор технологии: SOAP против REST (HTTP-сервисы)

Рассмотрим основной вопрос, который встает перед разработчиком: что лучше использовать — веб-сервис или HTTP-сервис? На текущий момент индустриальным стандартом для веб-разработки являются HTTP-сервисы (REST-архитектура). Разберем причины, почему в большинстве случаев стоит выбирать именно их:

  1. Формат данных: Веб-сервисы (SOAP) используют XML — тяжеловесный формат с жесткой структурой. HTTP-сервисы позволяют работать с JSON, который гораздо легче, проще читается человеком и нативно поддерживается всеми современными браузерами и языками программирования (JavaScript, Python, PHP).
  2. Простота разработки: Для создания HTTP-сервиса в 1С достаточно описать шаблоны URL и методы (GET, POST, PUT, DELETE). Веб-разработчику со стороны сайта будет гораздо проще отправить простой HTTP-запрос, чем формировать сложный XML-конверт для SOAP-запроса.
  3. Производительность: За счет меньшего объема передаваемых данных (JSON против XML) и отсутствия необходимости парсить громоздкие WSDL-описания, HTTP-сервисы показывают лучшую скорость работы, особенно на мобильных устройствах и медленных каналах связи.

Однако веб-сервисы (SOAP) могут быть полезны в корпоративных интеграциях типа "система-система", где критически важна жесткая типизация данных, "прибитая гвоздями" на уровне контракта, который описывается в WSDL.

Реализация HTTP-сервиса в 1С: основные шаги

Разберем процесс создания простого HTTP-сервиса. Предположим, нам нужно передать на сайт информацию об остатках товара. В дереве конфигурации в ветке "Общие" находим "HTTP-сервисы" и создаем новый объект.

Проанализируем структуру: нам необходимо определить Шаблон URL. Например, /get_balance/{Artikul}. Внутри шаблона мы создаем Метод, например, GET. Для этого метода система создаст обработчик в модуле HTTP-сервиса.

Посмотрим на пример кода, который возвращает остаток товара в формате JSON:


Функция ОстаткиТовараGet(Запрос)
    
    Артикул = Запрос.ПараметрыURL.Получить("Artikul");
    Остаток = ПолучитьОстатокПоАртикулу(Артикул); // Ваша функция поиска
    
    Ответ = Новый HTTPСервисОтвет(200);
    
    ДанныеОтвета = Новый Структура;
    ДанныеОтвета.Вставить("artikul", Артикул);
    ДанныеОтвета.Вставить("balance", Остаток);
    
    ЗаписьJSON = Новый ЗаписьJSON;
    ЗаписьJSON.УстановитьСтроку();
    ЗаписатьJSON(ЗаписьJSON, ДанныеОтвета);
    
    Ответ.УстановитьТелоИзСтроки(ЗаписьJSON.Закрыть());
    Ответ.Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");
    
    Возврат Ответ;
    
КонецФункции

Проблема CORS и безопасность при работе из браузера

Выясним причину, по которой запросы напрямую с сайта к 1С часто блокируются. Это происходит из-за политики CORS (Cross-Origin Resource Sharing). Если скрипт на сайте mysite.com пытается вызвать сервис 1С на домене 1c.mysite.com, браузер заблокирует такой запрос из соображений безопасности, если 1С явно не разрешит это в заголовках.

Для решения этой проблемы мы должны реализовать обработку метода OPTIONS в нашем HTTP-сервисе. Рассмотрим, какие заголовки необходимо добавить в ответ:

Оптимизация производительности: Пул соединений

Рассмотрим критически важный аспект настройки — пул соединений. По умолчанию при каждом обращении к веб-сервису 1С тратит время на запуск сеанса, авторизацию и инициализацию параметров. Это может занимать от 0.5 до нескольких секунд, что неприемлемо для работы сайта.

Чтобы избежать задержек, необходимо настроить файл публикации default.vrd на веб-сервере (Apache или IIS). Мы должны добавить параметры управления пулом сеансов poolSize и sessionMaxAge. Это позволит системе переиспользовать уже открытые сеансы. Проанализируем пример фрагмента файла default.vrd:


<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
       base="/BaseName"
       ib="Srvr=Server1C;Ref=BaseName;">
    <httpServices publishByDefault="true" />
    <standardOdata enable="true" />
    <pool size="10" maxAge="60" /> 
</point>

Использование пула позволяет сократить время отклика до нескольких миллисекунд, так как сеанс уже готов к обработке данных.

Автоматический REST API (OData)

Разберем ситуацию, когда нам нужно быстро дать доступ к данным без написания программного кода. В 1С существует механизм "Автоматический REST интерфейс". Чтобы им воспользоваться, достаточно в свойствах нужных объектов метаданных (например, Справочники или Документы) включить их использование в составе состава автоматического REST интерфейса.

Преимущества OData:

  1. Не нужно писать код методов GET/POST.
  2. Поддержка фильтрации, сортировки и пагинации "из коробки" (синтаксис протокола OData).
  3. Возможность получения данных в форматах ATOM (XML) или JSON.

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

Авторизация и защита данных

Интеграция всегда требует защиты. Рассмотрим основные методы:

Отладка и тестирование

Проанализируем инструменты, которые помогут нам при разработке. Для отладки HTTP-сервисов не обязательно сразу писать код на сайте. Рекомендуем использовать инструменты типа Postman или Insomnia. С их помощью можно имитировать запросы к 1С, проверять заголовки, тело запроса и корректность возвращаемых данных.

В самой 1С отладка HTTP-сервиса происходит так же, как и обычного кода: установите точку останова в модуле сервиса, запустите 1С в режиме отладки и отправьте запрос из внешней программы (например, из того же Postman). Вы увидите, как выполнение остановится на вашей точке останова, и вы сможете просмотреть значения переменных в объекте Запрос.

Подводя итог, можно с уверенностью сказать: для связки "Сайт + 1С" сегодня оптимальным выбором являются HTTP-сервисы. Они обеспечивают гибкость, высокую скорость работы и простоту интеграции для веб-разработчиков, позволяя превратить 1С в мощный бэкенд для ваших веб-проектов.

← На главную