1 подписчик

Веб - сервис: что это?

165 прочитали

Цель данной статьи – познакомить читателя с основами веб – сервисов и помочь сориентироваться в ключевых аспектах этой технологии.

Вы узнаете, что такое веб – сервисы (веб – службы, 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:

Код клиента1  - для веб
Код клиента1 - для веб

Это приложение в окне браузера отображает пару текс - боксов для ввода чисел и кнопочку «Execute», по нажатию на которую отрабатывают два метода сервера, в результате чего отображаются надпись «Hello World» и результат суммирования введенных в текст - боксы чисел.

И консольное приложение под Windows:

Код клиента2  - консоль
Код клиента2 - консоль

Приложение создает объект типа FirstService, и отображает в консоли две строки с результатами вызовов двух методов.

Информационная безопасность

Нельзя не сказать пару слов про информационную безопасность. Вопрос безопасности критически важен для веб - сервисов. При этом, сами по себе спецификации протоколов XML – RPC и SOAP не содержат явных требований к безопасности или аутентификации.

Итак, основные угроз три:

  • несанкционированное изменение сообщений;
  • утрата конфиденциальности сообщений;
  • нарушение аутентичности отправителя.

Обеспечение информационной безопасности осуществляется путем применения стандартных технологий в данной области – шифрования данных, цифровых подписей, защиты паролем и т.д.

Описание стандартов и спецификаций информационной безопасности выходит за рамки данной статьи.

Здесь лишь отметим, что меры по защите должны быть комплексными. Они должны включать защиту на всех уровнях архитектуры веб – сервисов: нужно защитить SOAP – сообщения, интерфейсы, средства обнаружения (реестры) и т.д.

Заключение

Итак, мы в общих чертах разобрались, что такое веб – сервисы, для чего нужна эта технология, какие принципы она реализует, и какие протоколы использует.

Мы даже создали свой веб – сервис в стиле Hello World , убедившись, в том, что это довольно простая задача при использовании современных средств разработки, которые берут на себя реализацию всей подноготной технологии, позволяя сконцентрироваться на решении практических задач.

Спасибо.