К статье
Практический материал

Разработка и Конфигурация · 11 мин

Чем отличается web-сервис от HTTP-сервиса в 1С

Разбираем различия web-сервисов и HTTP-сервисов в 1С: протоколы SOAP и REST, настройка публикации, форматы данных, критерии выбора и типичные ошибки интеграции.

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

Web-сервис в 1С — это реализация классического стека SOAP/WSDL. Платформа автоматически формирует описание сервиса (WSDL), сериализует данные в XML по строгой схеме и проверяет типы параметров. HTTP-сервис — это более свободный механизм, появившийся в платформе 8.3.5: разработчик сам определяет URL-шаблоны, методы (GET, POST, PUT, DELETE и другие) и формат тела запроса и ответа. Фактически HTTP-сервис позволяет строить REST-подобные API на стороне 1С.

Выбор между ними зависит от того, кто будет потребителем сервиса, какие требования предъявляются к формату данных и насколько важна строгая контрактная спецификация. Ниже разберём отличия по каждому значимому критерию и дадим практические критерии выбора.

Архитектурные различия: SOAP против REST-подхода

Web-сервис 1С построен на стандарте SOAP. Каждая операция описывается в конфигурации с указанием параметров и их типов, а платформа на основе этого описания автоматически генерирует WSDL-документ. Клиент получает WSDL, строит по нему прокси-классы и вызывает операции как обычные методы — вся работа с XML скрыта. Типы данных передаются через пакеты XDTO, что гарантирует строгую проверку структуры на обеих сторонах.

HTTP-сервис работает иначе: в нём разработчик определяет шаблоны URL (например, /products/{id}) и привязывает к ним методы HTTP. Платформа лишь передаёт в обработчик объект HTTPСервисЗапрос, из которого код сам извлекает параметры строки запроса, заголовки и тело. Никакого автоматического контракта нет — формат данных полностью на совести разработчика.

Из этого следует главное практическое различие: web-сервис — это «контрактный» подход, где стороны договариваются через формальное описание, а HTTP-сервис — «соглашательный», где договорённость фиксируется в документации, которую пишут вручную.

Сравнение по ключевым параметрам

Ниже сведены различия, которые важны при проектировании интеграции. Это не вопрос «что лучше», а набор компромиссов.

КритерийWeb-сервис (SOAP)HTTP-сервис (REST-подход)
Описание контрактаАвтоматический WSDLОтсутствует, документация вручную
Формат данныхXML по схеме XDTOПроизвольный: JSON, XML, двоичные данные
Типизация параметровСтрогая, проверяется платформойРучная разборка в коде
Методы HTTPФактически только POSTGET, POST, PUT, DELETE, PATCH и др.
URL-структураОдин адрес на сервисШаблоны URL с параметрами пути
Объём служебного трафикаБольшой (SOAP-конверты)Минимальный
Поддержка версий платформыДавно, с ранних версий 8.xС версии платформы 8.3.5

Обратите внимание на строку про объём трафика: SOAP-конверт добавляет заметные накладные расходы на каждый запрос. При высокой частоте вызовов и передаче небольших порций данных это становится ощутимым фактором в пользу HTTP-сервиса.

Как создаётся и публикуется каждый тип сервиса

Web-сервис добавляется в конфигураторе в ветке «Общие — Web-сервисы». Внутри объекта создаются операции, у каждой операции — параметры с типами значений или пакетами XDTO. В модуле web-сервиса пишутся функции-обработчики, возвращающие результат. Публикация выполняется через диалог «Администрирование — Публикация на веб-сервере», где для web-сервисов есть отдельный флаг; платформа формирует файл default.vrd с соответствующими настройками.

HTTP-сервис создаётся в ветке «Общие — HTTP-сервисы». Внутри объекта настраиваются шаблоны URL, а в каждом шаблоне — методы с обработчиками. Публикация также выполняется через файл default.vrd, но корневой URL задаётся свойством «Корневой URL» самого объекта HTTP-сервиса, поэтому несколько сервисов можно разнести по разным префиксам, например /api/catalog и /api/orders.

Порядок публикации HTTP-сервиса
  1. 1
    Создайте объект HTTP-сервиса в конфигураторе и задайте корневой URL
  2. 2
    Добавьте шаблоны URL и методы с обработчиками в модуле сервиса
  3. 3
    Настройте аутентификацию и права доступа к используемым объектам
  4. 4
    Опубликуйте базу на веб-сервере с отметкой публикации HTTP-сервисов
  5. 5
    Проверьте вызов из браузера или curl с корректными учётными данными

Форматы данных и работа с телом запроса

В web-сервисе формат предопределён: запрос и ответ — это XML внутри SOAP-конверта, структура которого выводится из XDTO-пакетов. Разработчик не управляет сериализацией напрямую — платформа сама преобразует значения в XML и обратно. Это удобно, пока структуры укладываются в типы XDTO, но становится ограничением, когда нужно передать, например, произвольный JSON с необязательными полями или вложенными массивами нефиксированной формы.

В HTTP-сервисе тело запроса доступно как строка или двоичные данные, и типичный приём — чтение JSON через ПрочитатьJSON с последующим обходом структуры. Ответ формируется симметрично: создаётся объект HTTPСервисОтвет, устанавливается код состояния (200, 400, 404, 500), заголовок Content-Type и тело. Именно здесь кроется и риск: платформа не проверит, что вы вернули корректный JSON или правильный код ошибки, — всё это зона ответственности кода.

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

Когда выбирать web-сервис, а когда HTTP-сервис

Web-сервис оправдан, когда внешняя система уже умеет работать с SOAP и требует WSDL: это характерно для интеграций с устаревшими корпоративными шинами, некоторыми банковскими и государственными системами, а также когда важна автоматическая валидация структур на уровне платформы. Второй сценарий — обмен между двумя базами 1С, где обе стороны одинаково хорошо понимают XDTO и WSDL-прокси.

HTTP-сервис выбирают для интеграции с веб-приложениями, мобильными клиентами, сайтами, системами на Python, PHP, Node.js и любыми технологиями, где стандартом де-факто является REST + JSON. Также HTTP-сервис незаменим, когда нужны нестандартные сценарии: приём файлов, вебхуки от внешних сервисов, выдача данных в специфичном формате, управление HTTP-кодами и заголовками (кэширование, CORS).

Маршрут решения

Как выбрать действие

Внешняя система требует WSDL и работает только по SOAPИспользуйте web-сервис 1С с пакетами XDTO
Клиенты — сайт, мобильное приложение или скрипты на современных языкахИспользуйте HTTP-сервис с JSON
Нужно принимать вебхуки от сторонних сервисов с произвольным теломТолько HTTP-сервис — web-сервис такой запрос не примет
Обе стороны — базы 1С и важна строгая типизацияWeb-сервис с XDTO даст автоматическую проверку структур

Безопасность и типичные ошибки

Оба механизма одинаково уязвимы при небрежной публикации: сервис, открытый наружу без аутентификации, даёт прямой доступ к данным базы. Минимальный набор мер — включение аутентификации на веб-сервере, отдельный пользователь 1С с узкими правами только на нужные объекты, HTTPS для шифрования трафика и ограничение доступа по IP на уровне веб-сервера или сетевого экрана, если потребителей немного.

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

Типичные ошибки
01
Передача произвольного JSON через web-сервис — SOAP-контракт этого не поддерживает, приходится извращённо упаковывать строки
02
Отсутствие обработки исключений в HTTP-сервисе — наружу уходит код 500 с техническим текстом ошибки
03
Игнорирование HTTP-кодов ответа — клиент не может отличить «нет данных» от «сервис сломан»
04
Публикация под пользователем с полными правами — компрометация сервиса равна компрометации всей базы
05
Возврат больших выборок без постраничности — таймауты и нагрузка на сервер 1С

Проверка работоспособности после публикации

Для web-сервиса первичная проверка — открытие WSDL в браузере по адресу вида https://server/base/ws/ServiceName?wsdl. Если XML-описание отображается, публикация и аутентификация работают. Далее операцию вызывают через тестовый клиент (например, SoapUI) или через WS-ссылку из другой базы 1С.

HTTP-сервис проверяется прямым запросом: GET-методы — прямо из браузера, остальные — через curl, Postman или аналог. Контролируйте три вещи: код ответа, заголовок Content-Type и содержимое тела. Полезно сразу проверить и негативные сценарии — запрос без авторизации должен возвращать 401, запрос к несуществующему ресурсу — 404.

Контрольные точки

Как проверить результат

WSDL web-сервиса в браузере
Норма

Отображается XML-описание сервиса

Тревожный признак

Ошибка 404 или запрос авторизации в цикле — публикация не настроена

Ответ HTTP-сервиса
Норма

Код 200, Content-Type соответствует формату, тело читается

Тревожный признак

Код 500 с текстом исключения или пустое тело

Запрос без учётных данных
Норма

Код 401 — аутентификация работает

Тревожный признак

Код 200 — сервис открыт анонимно, это угроза безопасности

Журнал регистрации после вызова
Норма

Нет необработанных ошибок от имени служебного пользователя

Тревожный признак

Записи об исключениях — обработчик падает

Ограничения и часто задаваемые вопросы

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

Итог

Что важно запомнить

Web-сервис 1С — это SOAP с автоматическим WSDL и строгой типизацией XDTO; HTTP-сервис — свободный REST-подход с ручной обработкой запросов и произвольными форматами. Выбор определяется потребителем: строгие корпоративные контракты — web-сервис, современные API и вебхуки — HTTP-сервис. В обоих случаях обязательны аутентификация, минимальные права и HTTPS.

Можно ли передавать JSON через web-сервис 1С?

Технически можно передать JSON как строку внутри XML-параметра, но это лишает web-сервис его главного преимущества — строгой типизации. Если интеграция строится на JSON, правильнее использовать HTTP-сервис, где JSON — естественный формат.

Что выбрать для интеграции 1С с сайтом?

Практически всегда HTTP-сервис: веб-разработчикам привычен REST и JSON, не нужно разбираться с SOAP-конвертами, а URL-структуру можно спроектировать под логику сайта. Web-сервис оправдан, только если платформа сайта уже имеет готовый SOAP-клиент.

Нужен ли отдельный веб-сервер для публикации?

Да, оба типа сервисов требуют публикации на веб-сервере — Apache или IIS. Файловая база без веб-сервера не сможет принимать внешние вызовы. Для клиент-серверного режима веб-сервер работает как шлюз к кластеру 1С.

Какой формат ответа об ошибке считается правильным для HTTP-сервиса?

Рекомендуется возвращать корректный HTTP-код (400 при ошибке в данных запроса, 401 при проблемах авторизации, 404 при отсутствии объекта, 500 при внутренней ошибке) и тело с кратким описанием в JSON. Технические тексты исключений 1С наружу возвращать не следует.

Можно ли вызывать web-сервисы и HTTP-сервисы 1С из другой базы 1С?

Да. Web-сервисы вызываются через WS-ссылки или объекты WSПрокси, HTTP-сервисы — через HTTPСоединение и HTTPЗапрос. Для обмена между двумя базами 1С оба варианта рабочие; выбор диктуется требованиями к формату и нагрузке.

Влияет ли тип сервиса на лицензии 1С?

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