При проектировании новых интеграций в экосистеме 1С разработчики часто сталкиваются с дилеммой: использовать классические Web-сервисы (SOAP) или современные HTTP-сервисы (REST). В этой статье мы подробно проанализируем оба подхода, разберем их технические особенности, сильные и слабые стороны, а также определим, в каких ситуациях каждый из них будет наиболее эффективным.
Для начала разберем суть технологий. Web-сервисы (WS) в 1С базируются на протоколе SOAP. Это тяжеловесный стандарт, использующий XML для передачи данных. Его главной особенностью является наличие жесткого контракта — WSDL-описания. HTTP-сервисы (HS) реализуют архитектурный стиль REST и обычно используют JSON. Они работают напрямую с HTTP-методами (GET, POST, PUT, DELETE) и не накладывают таких строгих ограничений на структуру пакета, как SOAP.
Рассмотрим специфику работы с Web-сервисами. Основное преимущество, которое выделяют сторонники WS, — это строгая типизация. Благодаря XDTO-пакетам, платформа 1С автоматически проверяет входящие данные на соответствие схеме. Если в схеме указано, что поле должно быть числом, передача строки вызовет ошибку еще на этапе парсинга веб-сервером.
Однако, как показывает практика, эта же особенность часто становится «бутылочным горлышком». Проанализируем основные недостатки:
XDTO на обеих сторонах интеграции. Если одна сторона обновила WSDL, а вторая нет, обмен может полностью остановиться.СериализаторXDTO требует больше ресурсов процессора и памяти, так как системе необходимо строить дерево объектов.Рассмотрим пример того, как программисты часто обходят ограничения WS, превращая их в «псевдо-HTTP», передавая данные одной строкой:
// Пример "плохой" практики в WS, когда типизация игнорируется
Функция ВыполнитьОбмен(ДанныеВФорматеJSON)
// Тип параметра - Строка, внутри которой упакован JSON
Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(ДанныеВФорматеJSON);
СтруктураДанных = ПрочитатьJSON(Чтение);
// ... дальнейшая обработка
КонецФункции
Такой подход нивелирует все преимущества WS, оставляя только его недостатки в виде накладных расходов на SOAP-конверт.
Теперь разберем, почему современная разработка практически полностью перешла на HTTP-сервисы. В основе HS лежит простота. Мы работаем с объектом HTTPСервисЗапрос (например, передавая GUID клиента в заголовках) и возвращаем HTTPСервисОтвет.
Основные преимущества HTTP-сервисов:
ЗаписьJSON, ЧтениеJSON) работают значительно быстрее, чем XDTO-сериализация, что позволяет быстро организовывать универсальные HTTP-сервисы.Посмотрим на пример реализации простого HTTP-сервиса для получения данных о номенклатуре:
Функция ПолучитьДанные(Запрос)
ИмяНоменклатуры = Запрос.ПараметрыURL.Получить("Имя");
СсылкаНаТовар = Справочники.Номенклатура.НайтиПоНаименованию(ИмяНоменклатуры);
Если СсылкаНаТовар.Пустая() Тогда
Возврат Новый HTTPСервисОтвет(404);
КонецЕсли;
Результат = Новый Структура;
Результат.Вставить("Артикул", СсылкаНаТовар.Артикул);
Результат.Вставить("Цена", СсылкаНаТовар.Цена);
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, Результат);
Ответ = Новый HTTPСервисОтвет(200);
Ответ.УстановитьТелоИзСтроки(ЗаписьJSON.Закрыть());
Возврат Ответ;
КонецФункции
Выясним причину, по которой многие до сих пор ценят WS за типизацию. В WS тип данных проверяется на уровне платформы. В HS за валидацию отвечает программист. Однако, как отмечают эксперты, в 1С программисты привыкли к «мягкой» типизации. Часто в WS-схемах намеренно используют типы xs:anyType или просто xs:string, чтобы передать произвольные данные, что сводит на нет преимущество контроля типов.
В современных HTTP-сервисах проблема валидации решается использованием JSON Schema или просто проверкой структуры внутри кода 1С. Это дает больше контроля над тем, какую именно ошибку вернуть пользователю.
Несмотря на доминирование HTTP, существуют сценарии, где WS (SOAP) оправдан:
EnterpriseData) исторически завязаны на Web-сервисы. Если система уже отлажена и работает, переводить ее на HS может быть экономически нецелесообразно.Проанализировав ситуацию, можно сделать следующие выводы:
Для новых интеграций (особенно 1С с внешними системами: сайтами, мобильными приложениями, облачными сервисами) однозначным выбором являются HTTP-сервисы. Они обеспечивают высокую скорость разработки, легкость масштабирования и соответствуют мировым стандартам архитектуры программного обеспечения.
Для внутренних обменов 1С-1С в стабильных, редко меняющихся системах можно продолжать использовать Web-сервисы, если вам важна автоматическая проверка типов и вы готовы мириться с некоторой «неповоротливостью» технологии XDTO.
Важный совет: Если вы выбираете HTTP-сервисы, старайтесь использовать встроенную сериализацию прикладных типов 1С в JSON, которая появилась в последних версиях платформы 8.3. Это позволит значительно сократить объем ручного кода при передаче сложных объектов.