Цель данной статьи – познакомить читателя с основами веб – сервисов и помочь сориентироваться в ключевых аспектах этой технологии.
Вы узнаете, что такое веб – сервисы (веб – службы, web - services), для чего они нужны, и как их использовать на простом примере.
От читателя не требуется глубокого погружения в предметную область, однако базовое представление о таких вещах, как, например XML, HTTP, TCP / IP и т.п. будет плюсом в плане восприятия информации. Для тех, кто хоть немного читает код – размещен пример реализации на C# .NET
Что такое веб-сервисы?
В разных источниках можно найти разные определения и веб - сервисов. Рассмотрим некоторые из них, специально подобранные таким образом, чтобы дополняя друг друга, они могли сформировать общее представление о данной технологии.
- Веб-сервис – это часть программной системы, доступная через Интернет и использующая стандартизированную, основанную на XML, систему обмена сообщениями. XML используется для оформления любых сообщений веб-службы. Например, клиент вызывает веб-сервис, отправляя ему XML- запрос, а затем ожидает ответа в том же формате. Так как все взаимодействие происходит с использованием XML, веб-сервисы не привязаны к какой-либо определенной операционной системе или языку программирования: Java – приложения могут взаимодействовать с Perl - приложениями; Windows - приложения могут взаимодействовать с Unix - приложениями.
- Веб – сервисы это автономные, модульные, распределенные, динамические приложения, которые могут быть описаны, опубликованы, найдены и вызваны в сети с целью создания продуктов, реализации процессов или цепочек поставок. Эти приложения могут быть как локальными, так и распределенными в локальной сети или в Интернете. Веб – сервисы являются своего рода надстройкой над такими открытыми стандартами как TCP/IP, HTTP, HTML и XML.
- Веб-сервисы – системы обмена основанной на формате XML информацией, использующие Интернет для прямого взаимодействия между приложениями. Они могут включать в себя программы, объекты, сообщения и документы.
- Веб-сервисы это набор открытых протоколов и стандартов, используемых для обмена данными между приложениями или программными системами. Приложения, написанные на различных языках программирования и работающие на различных платформах, могут использовать веб-сервисы для обмена данными по сети (Интернет или интранет), аналогично тому, как взаимодействие между различными процессами происходит на локальном компьютере. Такая функциональная совместимость (например, между приложениями Java и Python или Windows и Linux) становится возможна благодаря использованием открытых стандартов.
- Веб – сервисы – это платформо - независимая технология разработки распределенных приложений, основанная на протоколах SOAP, WSDL, UDDI.
- Веб – сервис – единица модульности при описании сервис – ориентированной архитектуры (SOA).
Что мы имеем в сухом остатке? Получается, что полноценный веб-сервис обладает следующим набором характеристик:
- Он доступен через Интернет или интранет;
- Он использует стандартизированную систему обмена сообщениями в формате XML;
- Он не привязан ни к какой конкретной операционной системе или языку программирования;
- Его интерфейс может быть описан средствами языка XML (для этого существует стандарт WSDL);
- Веб-сервис может быть найден в сети другими программными системами.
Протоколы веб - сервисов.
Технология веб – сервисов функционирует на базе открытых протоколов и стандартов обмена данными.
Базовая платформа: XML + HTTP. По сути, если рассматривать веб- сервисы в разрезе стека протоколов, получается, что веб - сервисы это некая надстройка поверх протокола HTTP.
Классические протоколы веб - сервисов:
- SOAP (Simple Object Access Protocol);
- WSDL (Web Services Description Language);
- UDDI (Universal Description, Discovery and Integration).
Часто в контексте веб – сервисов упоминается REST (Representational State Transfer). Но мы здесь не будет этого делать. Во – первых, потому, что REST не имеет отношения к классическим веб – сервисам, во – вторых, потому, что мы хотели бы отделить мух от котлет в этом обзоре, и не смешивать различные понятия. Если кратко, REST это не протокол, и не технология, а концепция, в основе которой лежит архитектурный стиль.
Подробнее о перечисленных протоколах – в разделе, посвященном архитектуре.
Как работает веб – сервис?
Веб-сервис обеспечивает возможность взаимодействие между приложениями с использованием открытых стандартов обмена данными, таких как HTML, XML, WSDL и SOAP.
Веб – сервис использует:
- XML - для структурирования данных;
- SOAP - для передачи этих структурированных данных в виде сообщений;
- WSDL - для описания структуры и функциональных возможностей нашего веб – сервиса;
- UDDI – для целей публикации и поиска в сети.
Сама суть этой технологии заключается в том, что можно написать веб – сервис на языке Java под управлением операционной системой Solaris, который будет доступен из программы, написанной на Visual Basic под Windows. Можно использовать C# для создания новых веб – сервисов под Windows, которые потом можно будет вызывать из веб – приложения, основанного на Java Server Pages и работающего под Linux.
Пример описания системы
Рассмотрим, как работает простейшая гипотетическая система управления учетными записями пользователей. Предположим, пользователь, с помощью клиентского приложения, написанного на Visual Basic или JSP, хочет создать новую учетную запись. Так же предположим, что логика серверной части системы запрограммирована на Java и функционирует на другой машине в сети под управлением ОС Solaris. Кроме того, серверная часть взаимодействует с базой данных.
Имеем следующие последовательные шаги выполнения операции создания учетной записи:
1. Клиентская часть на основе введенной пользователем информации формирует SOAP-сообщение.
2. Это SOAP - сообщение передается удаленному веб-сервису в качестве тела POST - запроса.
3. Удаленный веб-сервис распаковывает полученное SOAP - сообщение и преобразует его в команду, понятную приложению.
4. Приложение обрабатывает полученную информацию в соответствии с запрограммированной в нем логикой и создает новый аккаунт пользователя.
5. Затем, сформировав ответ, веб – сервис заворачивает его в SOAP и отправляет клиенту.
6. Клиентская часть распаковывает SOAP – сообщение и отображает информация для пользователя.
Преимущества Веб – сервисов.
Возможность представление функциональности в сети и ее многократного использования
Веб – сервис, как управляемая единица кода, может быть удаленно вызван с использованием протокола HTTP. То есть он может быть активирован посредством простого HTTP - запроса. Технология веб – сервисов позволяет представить функциональность существующего кода в сети. В результате, другие приложения смогут использовать предоставленную им функциональность (или часть функциональности) вашей программы. Одно из главных преимуществ веб – сервисов заключается в том, что один и тот же сервис может потребляться разными клиентами.
Функциональная совместимость
Веб – сервисы позволяют разнородным приложениям общаться между собой и совместно использовать данные и функции. Например, приложение, написанное на Visual Basic или .NET может взаимодействовать с приложением, написанным на Java, и наоборот. Веб-сервисы позволяют достигнуть независимости в выборе платформы и средств разработки вашего приложения.
Стандартизированные протоколы
Для связи веб - сервисы используют стандартизированные промышленные стандарты протоколов. На всех четырех уровнях сетевого взаимодействия (более подробно об уровнях - в следующем разделе) используются четко очерченные стандарты. Причем это открытые промышленные стандарты. Подобный подход предоставляет бизнесу множество преимуществ, таких как многовариантность выбора, снижение рыночной стоимости решений и повышение их качества.
Низкая стоимость коммуникации
Веб – сервисы используют протокол SOAP поверх стандартного HTTP , следовательно, для реализации взаимодействия подойдет уже имеющийся интернет – канал. И это обойдется гораздо дешевле, чем использование иных решений, например, таких как EDI/B2B. (Кроме HTTP, SOAP может работать и поверх FTP или SMTP).
Недостатки веб – сервисов
Стоит отметить, что данная технология обеспечивает не самую лучшую производительность, имеет довольно большой объем сетевого траффика за счет использования текстовых сообщений и требует пристального рассмотрения вопросов информационной безопасности.
Характеристики
Базируются на XML
Веб-сервисы используют XML на уровнях представления и передачи данных. Использование XML исключает привязку к типу сети, операционной системы или программной платформы. Приложения на основе веб – сервисов обладают высокой совместимостью на уровне ядра.
Слабая связанность
Принцип слабой связанности означает, что зависимость между логикой работы взаимодействующих сторон минимизирована. Поставщик сервиса имеет возможность изменять его реализацию, и при этом не будут затрагиваться интересы потребителя, т. к. взаимодействие происходит через дополнительный уровень абстракции данных.
Крупномодульность
Современные объектно-ориентированные технологии, например Java, предоставляют свою функциональность в виде небольших, имеющих элементарный объем функциональности методов. Такой метод – слишком маленькая функциональная единица с точки зрения бизнеса. Создание программы на Java подразумевает написание множества мелких методов, которые затем будут объединены в единый сервис, подходящий для поставки клиенту или другому сервису. Бизнесу интересна функциональность бизнес-уровня, и технология веб-сервисов идеально для этого подходит.
Синхронные и асинхронные методы работы
Технология позволяет использовать оба метода взаимодействия.
Поддержка RPCs (Remote Procedure Calls)
Веб-сервисы позволяют клиентам вызывать процедуры, функции и методы в другом адресном пространстве с помощью основанного на XML протокола SOAP.
Поддержка обмена документами
Одно из ключевых преимуществ использования XML заключается в его возможности кодирования не только данных, но и целых документов. Веб-сервисы поддерживают открытый обмен документами, что, безусловно, облегчает процессы интеграции.
Архитектура веб - сервисов
Рассмотрим архитектуру веб – сервисов с двух ракурсов:
1. С точки зрения ролей;
2. С точки зрения стека протоколов.
Роли
Есть три основных роли:
Провайдер сервиса (service provider)
Это поставщик веб – сервиса (сервер). Он реализует веб – сервис и делает его доступным в Интернете.
Потребитель сервиса (service requestor)
Это любой пользователь веб – сервиса (клиент). Он применяет веб - сервис для своих нужд: создает сетевое соединение и отправляет XML – запрос.
Реестр сервисов (service registry)
Это каталог сервисов, в котором разработчики могут публиковать новые сервисы или находить существующие.
Стек протоколов веб – сервисов
Второй вариант – рассмотреть стек протоколов, используемых веб – сервисами. В настоящее время можно говорить о четырех основных уровнях протоколов, представленных на рисунке ниже:
Уровень транспортной инфраструктуры
Этот уровень отвечает за транспортировку сообщений по сети между приложениями. (Не следует путать с транспортным уровнем модели OSI. Согласно модели OSI , это прикладной уровень.) В настоящее время этот уровень включает классические протоколы HTTP, SMTP, FTP, и более современные протоколы, например, BEEP (Blocks Extensible Exchange Protocol).
Уровень обмена сообщениями
Этот уровень отвечает за кодирование сообщений в понятном как для провайдера так и для потребителя XML – формате. В настоящее время этот уровень представлен XML- RPC и SOAP.
Уровень описания веб - сервисов
Этот уровень отвечает за описание публичного интерфейса веб – сервиса. В настоящее время для описания используется WSDL (Web Service Definition Language).
Уровень публикации и поиска веб - сервисов
Этот уровень отвечает за централизацию сервисов в общем реестре и предоставление соответствующей функциональности для публикации и поиска веб - сервисов. В настоящее время эти задачи решаются с помощью UDDI.
Не исключено, что по мере развития технологии могут быть добавлены еще какие – либо уровни и протоколы.
Более детальное описание компонентов будет приведено в следующем разделе.
А здесь еще несколько слов о транспортной инфраструктуре.
Это самый нижний уровень используемого стека протоколов. И этот уровень отвечает за передачу XML- сообщений между двумя компьютерами.
HTTP (Hyper Text Transport Protocol)
В настоящее время это самый широко - используемый протокол передачи данных в Интернет. Он прост, надежен и популярен. Более того, большинство фаерволлов лояльно относятся к HTTP - трафику, что позволяет сообщениям XML- RPC или SOAP «маскироваться» под сообщения HTTP. Это хорошо с точки зрения упрощения интеграции удаленных приложений, но возникают некоторые нюансы с точки зрения безопасности. Впрочем, они решаются при помощи реализации механизмов авторизации, аутентификации и использования протоколов защиты.
BEEP (Blocks Extensible Exchange Protocol) –
BEEP – «расширяемый протокол обмена блоками» и подающая надежды альтернатива протоколу HTTP. BEEP - это фреймворк для создания новых протоколов прикладного уровня. BEEP базируется непосредственно на TCP и включает ряд встроенных функций, в том числе протокол начальной установки связи, аутентификацию, безопасность и обработку ошибок. Использую BEEP можно создавать новые протоколы для различных приложений, включая обмен мгновенными сообщениями, передачу файлов и управление сетью.
SOAP сам по себе не привязан ни к какому транспортному протоколу. Поэтому его можно использовать и через HTTP, SMTP, FTP и, возможно, через BEEP.
Компоненты
Классические веб – сервисы реализуются на четверке протоколов: XML –RPC, SOAP, WSDL и UDDI.
XML – RPC
Простейший, основанный на XML протокол для вызова удаленных процедур в сети.
- XML – RPC - протокол, который использует XML – сообщения для выполнения удаленного вызова процедур.
- Запросы кодируются на языке XML и посылаются при помощи метода POST.
- XML – RPC не зависит от платформы.
- XML – RPC позволяет обмениваться данными разнородным приложениям.
- Java – клиент можно общаться посредством XML – RPC с Perl – сервером.
- XML – RPC простейших способ начать использовать веб – сервисы.
SOAP
SOAP – это "обертка" для XML. Среды разработки могут иметь встроенные пакеты для работы с SOAP.
- SOAP – это протокол связи.
- SOAP предназначен для связи между приложениями.
- SOAP это обертка для XML – сообщений.
- SOAP не зависит от платформы.
- SOAP прост и расширяем.
- SOAP не блокируют фаерволлы.
WSDL
WSDL – это основанный на XML язык, предназначенный для описания функциональности веб – сервисов и доступа к ним. На практике у нас будет автоматически сгенерированный средствами среды разработки XML – файл с определенной структурой, описывающий наш веб – сервис.
- WSDL означает язык описания веб – сервисов.
- WSDL совместно разработан фирмами Microsoft и IBM.
- WSDL стандарт для описания веб – сервисов.
- WSDL описывает способ доступа к веб – сервису и какие операции он может выполнять.
UDDI
UDDI – основанный на XML стандарт для описания, публикации и поиска веб – сервисов.
- UDDI означает универсальное описание, открытие и интеграция.
- UDDI – это спецификация распределенного реестра веб – сервисов.
- UDDI – это платформонезависимый, открытый фреймворк.
- UDDI использует WSDL для описания интерфейсов веб – сервисов.
- UDDI наряду с SOAP и WSDL является одним из трех основных стандартов веб – сервисов.
- UDDI – это открытый индустриальный стандарт, позволяющим компаниям интегрироваться между собой и определяющий способ взаимодействия.
Пример реализации веб - сервиса
Рассмотрим простейший пример реализаций веб – сервиса на .NET.
Как нам уже известно, веб – сервисная архитектура предполагает наличие провайдера сервиса (service provider) и потребителя сервиса (service consumer) – сервера и клиента.
Напишем простой сервис провайдер, использую .NET SDK.
Итак, наш сервер будет реализовывать два метода:
- метод Add, получающий на входе два целых числа и возвращающий на выходе их сумму;
- метод SayHello, не имеющий входных параметров и возвращающий на выходе строку «Hello World».
А так же напишем два клиента:
веб – приложение на ASP.NET:
Это приложение в окне браузера отображает пару текс - боксов для ввода чисел и кнопочку «Execute», по нажатию на которую отрабатывают два метода сервера, в результате чего отображаются надпись «Hello World» и результат суммирования введенных в текст - боксы чисел.
И консольное приложение под Windows:
Приложение создает объект типа FirstService, и отображает в консоли две строки с результатами вызовов двух методов.
Информационная безопасность
Нельзя не сказать пару слов про информационную безопасность. Вопрос безопасности критически важен для веб - сервисов. При этом, сами по себе спецификации протоколов XML – RPC и SOAP не содержат явных требований к безопасности или аутентификации.
Итак, основные угроз три:
- несанкционированное изменение сообщений;
- утрата конфиденциальности сообщений;
- нарушение аутентичности отправителя.
Обеспечение информационной безопасности осуществляется путем применения стандартных технологий в данной области – шифрования данных, цифровых подписей, защиты паролем и т.д.
Описание стандартов и спецификаций информационной безопасности выходит за рамки данной статьи.
Здесь лишь отметим, что меры по защите должны быть комплексными. Они должны включать защиту на всех уровнях архитектуры веб – сервисов: нужно защитить SOAP – сообщения, интерфейсы, средства обнаружения (реестры) и т.д.
Заключение
Итак, мы в общих чертах разобрались, что такое веб – сервисы, для чего нужна эта технология, какие принципы она реализует, и какие протоколы использует.
Мы даже создали свой веб – сервис в стиле Hello World , убедившись, в том, что это довольно простая задача при использовании современных средств разработки, которые берут на себя реализацию всей подноготной технологии, позволяя сконцентрироваться на решении практических задач.
Спасибо.