При необходимости организовать интеграцию 1С с внешними системами (будь то сайты, мобильные приложения или другие корпоративные программы) разработчик неизбежно сталкивается с выбором между двумя типами объектов в конфигураторе: Web-сервисы и HTTP-сервисы. На первый взгляд они кажутся взаимозаменяемыми, так как оба работают поверх протокола HTTP, однако их внутренняя логика и архитектурный подход кардинально различаются. Разберем подробно, какой инструмент лучше выбрать под конкретную задачу.
Для начала проанализируем фундаментальные стандарты, на которых базируются эти объекты. Web-сервисы в 1С реализуют протокол SOAP (Simple Object Access Protocol). Это строго регламентированный стандарт обмена данными, где каждое сообщение упаковывается в специальный «конверт» (Envelope). В этом конверте передается заголовок и тело сообщения в формате XML.
HTTP-сервисы в 1С больше ориентированы на архитектурный стиль REST (Representational State Transfer). Это современный подход, который не накладывает жестких ограничений на структуру сообщения. Мы используем стандартные методы протокола HTTP для манипуляции данными, что делает взаимодействие более легким и быстрым.
Разберем ситуацию, упомянутую в обсуждении: как платформа реагирует на входящие данные. В Web-сервисах к объекту «прибит» автоматический сериализатор. Это означает, что работа сервиса неразрывно связана с XDTO-пакетами. Проанализируем последствия этого:
WSDL-файл (Web Services Description Language). Это «паспорт» сервиса, который сторонняя система может прочитать и автоматически создать у себя нужные классы и структуры для работы с вашей базой.В случае с HTTP-сервисами ситуация иная. Платформа принимает любой поток данных, который пришел в теле запроса. Валидность данных проверяется непосредственно программным кодом разработчика. Рассмотрим пример получения данных в HTTP-сервисе:
Функция ИмяМетода(Запрос)
ТелоЗапроса = Запрос.ПолучитьТелоКакСтроку();
// Разработчик сам решает, как интерпретировать эти данные
// и сам проверяет их корректность через ЧтениеJSON или ЧтениеXML
Попытка
Данные = ПрочитатьJSON(ТелоЗапроса);
Исключение
Возврат Новый HTTPСервисОтвет(400); // Ошибка формата
КонецПопытки;
КонецФункции
Посмотрим на то, как используются методы протокола HTTP. В Web-сервисах, согласно стандарту SOAP, практически всегда используется только метод POST. Суть операции (прочитать, записать, удалить) описывается внутри XML-сообщения.
В HTTP-сервисах мы задействуем всю семантику протокола. Это позволяет строить красивые и понятные URL-адреса и использовать стандартные методы:
GET — для получения данных (например, остатков товара);POST — для создания новых объектов (например, нового заказа);PUT или PATCH — для обновления существующих данных;DELETE — для удаления.Выясним причину, почему для современных систем чаще выбирают HTTP-сервисы. Web-сервисы исторически «заточены» под XML. Хотя технически можно передать JSON внутри строки в Web-сервисе, это превращает инструмент в «микроскоп для забивания гвоздей», так как теряются все преимущества типизации XDTO.
HTTP-сервисы позволяют отдавать данные в любом формате: JSON, XML, HTML, бинарные данные (картинки, PDF) или даже простой текст. Поскольку JSON значительно компактнее, чем XML (в нем нет громоздких тегов и пространств имен), он потребляет меньше трафика и быстрее обрабатывается на стороне клиента (особенно в веб-браузерах и мобильных приложениях).
Проанализируем вопрос ресурсов. Web-сервисы создают дополнительную нагрузку (overhead) на систему из-за необходимости парсинга сложных XML-структур и поддержки стандарта SOAP. HTTP-сервисы работают максимально близко к «железу» протокола, передавая только полезную нагрузку.
С точки зрения отладки:
SoapUI.GET-запросов) достаточно обычного браузера или простых утилит типа Postman или cURL.Рассмотрим рекомендации по выбору инструмента в зависимости от условий задачи:
WSDL.JSON.Base64.Таким образом, хотя Web-сервис и является в некотором роде частным случаем HTTP-взаимодействия (строго определенный POST-запрос с XML), в платформе 1С эти объекты разделены для оптимизации под разные задачи: строгий корпоративный стандарт (Web) против гибкости и легкости современного веба (HTTP).