Интеграция с помощью веб-сервисов

 Web-сервисы - это один из механизмов платформы, используемых для интеграции с другими информационными системами. 

Прикладное решение 1С:Предприятия 8 может являться как поставщиком веб-сервисов, так и потребителем веб-сервисов, опубликованных другими поставщиками.

 Иными словами веб сервис – это набор функций (процедур), которые могут быть вызваны извне программы и базы данных.

Для того, чтобы другая программа знала, что такой «сервис» есть у этой программы, первая на веб сайте выкладывает сведения о своих сервисах. Формат такого описания – файл WSDL.

WSDL(Web Services Description Language) — язык описания веб-сервисов и доступа к ним, основанный на языке XML. (спецификацияhttp://www.w3.org/TR/wsdl).

SOAP(Simple Object Access Protocol — простой протокол доступа к объектам) — протокол обмена структурированными сообщениями в распределенной вычислительной среде. SOAP используется для обмена произвольными сообщениями в формате XML и удалённого вызова процедур (RPC). (спецификация
http://www.w3.org/TR/soap/).

XDTO(XML Data Transfer Objects) — механизм объектного моделирования данных, описываемых с помощью схемы XML (подробнее
http://v8.1c.ru/overview/xdto.htm).

SOA – «сервис ориентированная архитектура» – означает, что программы для обмена данными друг с другом используют «сервисы».

Функции извне вызываются (запускаются) запросом по протоколу SOAP.

Для передачи параметров и результатов используется XML. Для работы с веб-сервисами Вы должны иметь базовое понимание про XML и XDTO.

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

Примерно на этом месте владелец реальной информационной системы должен прервать лектора и высказаться о том, что парадигмы и технологии — это, конечно, очень хорошо и прогрессивно, но можно ли получить от них действительную и зримую пользу? Давайте рассмотрим несколько примеров.

Самый простой и очевидный пример — получение справочных данных из публичных сервисов, доступных в Интернете. Например, Аэрофлот посредством Web-сервиса предоставляет информацию о своих рейсах, Банк России — информацию о курсах валют, ценных бумагах, кредитных организациях — вариантов может быть много. Такое взаимодействие можно отнести скорее к демонстрации возможностей технологии, чем к реальным выгодам для предприятия. Впрочем, если предприятие работает на финансовом рынке, функциональность регулярной автоматической загрузки в базу данных актуальной информации ЦБ может оказаться вполне востребованной.

Чуть менее очевидный, но тоже относительно простой пример — интеграция информационной системы и Web-сайта компании. Предположим, нам захотелось немного порадовать наших заказчиков и дать им возможность получать актуальную информацию о состоянии заказа в Интернете. Сайт нашей компании реализован, например, на популярной у Web-разработчиков платформе LAMP (Linux, Apache, MySQL, PHP) и знать ничего не знает про «1С:Предприятие». Информация о заказах находится в информационной базе «1С:Управления торговлей», которая также не имеет никакого понятия о существовании сайта. Но обе платформы умеют передавать и получать данные посредством Web-сервисов — следовательно, их легко можно интегрировать. В прикладном решении (конфигурации) «1С:Предприятия» потребуется создать Web-сервис, умеющий читать состояние заказа по его идентификатору. На сайте потребуется создать простую функцию, которая получает от посетителя идентификатор заказа, запрашивает Web-сервис и показывает полученный результат. Важно, что при таком подходе структура данных каждой из систем не изменяется, а вмешательство в их программный код минимально.

Web-сервисы — очень удобный инструмент в тех ситуациях, когда нужно «научить общаться» несколько разнородных систем (зачастую принадлежащих разным предприятиям) в сжатые сроки и ценой относительно небольших трудозатрат.

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

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

Был выбран следующий вариант решения: «создать в информационной базе Web-сервис и доработать программное обеспечение весовых станций таким образом, чтобы запись очередного взвешивания сопровождалась вызовом Web-сервиса». Поскольку передаваемая информация очень проста по структуре (номер автомобиля, идентификатор предприятия-владельца, момент времени, масса груза), работы по интеграции заняли буквально пару дней. Вся инфраструктурная составляющая уже была реализована на платформе, нам оставалось только придумать имя Web-сервиса и написать прикладной код, превращающий переданное сообщение в объект базы данных. При варианте собственного формата пришлось бы создать и отладить еще и подобие собственного протокола взаимодействия информационных систем, что потребовало бы совсем других затрат времени и труда.

Еще один пример из области полезного применения Web-сервисов — создание предприятием собственных публичных (или частично публичных, «только для партнеров и/или покупателей») сервисов. Сервисом может стать практически любая операция взаимодействия с контрагентами: «получить актуальный прайс-лист», «оформить заказ», «проинформировать об оплате», «запросить отчет о сверке» и т. д. Зачем это нужно с точки зрения эффективности бизнеса? Неисчислимое количество сотрудников различных предприятий ежедневно занимается ручной оцифровкой «бумажной» информации, трудозатраты на двойной (как минимум) ввод одних и тех же данных на разных «концах провода» огромны, но явно неэффективны. Зачем вручную вводить один и тот же документ в две системы, если первая система-инициатор процесса может самостоятельно передать информацию системе-получателю? Зачем вручную формировать отчет и вручную же высылать его по электронной почте, если информационная система может сделать это самостоятельно по просьбе внешнего пользователя? Разумеется, нельзя регламентировать и автоматизировать все варианты взаимодействия во всем мире, но некоторые типичные и регулярно повторяемые на конкретных предприятиях — вполне можно и даже необходимо.

Создать и развернуть Web-сервис, как мы увидим чуть ниже, несложно. Гораздо более сложная задача — спроектировать такой сервис, который будет интересен и полезен потребителям. Возможно, потенциальным потребителям сначала придется объяснить, что они являются потенциальными потребителями сервисно-ориентированной функциональности, и наглядно показать, какие именно выгоды они могут от нее получить. Если продолжить размышлять в этом направлении, то можно увидеть широкое поле деятельности для компаний, работающих в сфере ИТ-консалтинга, — но такие рассуждения все же выходят за рамки статьи.

Все чаще и чаще встречаются обмены, используя технологию Web-Сервисов. Это удобно, т.к для хостовой базы данных достаточно установить расширение Web-Сервиса и обработчик данных, а для клинтского решения подключиться к Web-Сервису. Технология является мультиплатформенной и на данный момент ее использование весьма актуально.

Ни одна технология не является идеальной, и Web-сервисы не исключение. Во-первых, производительность при передаче данных, «обернутых» Web-сервисом, будет ниже, чем при прямом взаимодействии информационных систем. При передаче небольших объектов потеря производительности будет незаметна, но, если за одно обращение нужно передавать десятки мегабайт, — наверное, следует поискать какую-то другую технологию. Во-вторых, и это общая проблема кросс-платформенных стандартов, реализация технологии на разных платформах может различаться, вплоть до несовместимости «клиента на платформе А» и «сервиса на платформе Б» в наиболее запущенных (но и наиболее редких) случаях. Как можно с этим бороться? Так же, как и с любым другим технологическим риском несовместимости: создавать прототипы, проводить предварительное тестирование, выявлять проблемы и находить способы обхода на как можно более ранних стадиях разработки.

Примеры задач:

  1. Складской учет, по некоторым причинам, на сайте не ведется. Необходимо в карточке товара на сайте - иметь возможность отобразить текущий свободный остаток данного товара.
  2. http://www.cbr.ru/scripts/Root.asp?Prtid=DWShttp://www.cbr.ru/scripts/Root.asp?Prtid=DWS веб-сервис Центробанка, для получения ежедневных данных.
  3. http://api.yandex.ru/speller/doc/dg/concepts/api-overview.xmlhttp://api.yandex.ru/speller/doc/dg/concepts/api-overview.xml веб-сервис Яндекса проверки правописания.
  4. https://www.flightstats.com/developers/bin/view/Web+Services/WSDL ряд веб сервисов авиастатистики, для мониторинга полетов, сведений о погоде, и.т.п.

Примеры: