Что такое веб-сервис? Для того, чтобы ответить на этот вопрос, разберем термин на две части. И если с первой частью (веб) все предельно ясно — что то, использующее всемирную паутину, то со второй (сервис) все не так просто.
Обратимся к словарям.
Впервые понятие сервис упоминается в Советском Энциклопедическом Словаре (издательство Советская энциклопедия, 1981 г.), где дается определение: сервис — обслуживание населения. В те годы это понятие ассоциировалось с ремонто-бытовым сервисом и автосервисом.
Сформулируем более современным языком: сервис — это процедура оказания поставщиком услуги потребителю. Это понятие часто расширяют, именуя сервисом, для удобства, самого поставщика (чего и я буду придерживаться в дальнейшем).
Понятие сервиса неразрывно связано с понятием услуга. Есть немало определений услуги, но для лучшего понимания мы выберем вот такое: услуга — результат, по меньшей мере, одного действия, обязательно осуществленного поставщиком в адрес потребителя.
Приведу примеры. Вы звоните в справочное, и спрашиваете телефон поликлиники. Сотрудник справочного бюро находит нужный телефон и сообщает его вам. В этой ситуации сотрудник бюро оказал вам запрошенную услугу, за счет которой вы получили выгоду, выступив в роли представителя поставщика. Таким образом, само справочное бюро можно считать сервисом. Самое важное в сервисе — потребитель услуги не обязан знать механизм её осуществления поставщиком. Вас же не интересует, где сотрудник бюро взял искомый телефон — в электронной базе, или в бумажной картотеке? Все, что должен знать клиент — это «интерфейс» для взаимодействия с сервисом: как послать запрос (телефон справочного бюро), как описать параметры запрашиваемой услуги (чей именно телефон нужен), и как интерпретировать результат (ответ сотрудника бюро).
На самом деле, сервисы окружают нас в повседневной жизни. Мы совершаем покупки в магазине, пользуемся общественным транспортом, звоним по телефону, пишем запросы в поисковых системах — все это является использованием сервисов.
С этим разобрались. Теперь переходим к главному: что такое веб-сервис и для чего он нужен? Вот что сообщает Википедия:
Веб-служба, веб-сервис (англ.web service) — идентифицируемая веб—адресом программная система со стандартизированными интерфейсами. Веб-службы могут взаимодействовать друг с другом и со сторонними приложениями посредством сообщений, основанных на определённых протоколах (XML, JSON и т. д.). Веб-служба является единицей модульностипри использовании сервис-ориентированной архитектуры приложения.
То есть, веб-сервис является некой программой, работающей на удаленном веб-сервере, и предоставляющая клиентам некоторые услуги.
Как это работает: на веб-сервере запускается приложение, называющее себя веб-сервисом. Для того, чтобы поддерживать свое гордое звание, оно просто обязано рассказывать о своем интерфейсе — чтобы клиенты могли использовать его. Для этого сервис предоставляет WSDL-документ — заданное с помощью XML-based языка описание интерфейса веб-сервиса.
Кроме того, порядочный сервис должен действительно предоставлять этот интерфейс. Если он сообщает в WSDL-описании, что он может предоставить услугу по получению информации о текущем времени в зависимости от часового пояса, то клиент, прочитав описание, должен суметь составить правильный запрос к сервису и получить адекватный ответ от него.
Когда клиент прочитывает информацию о сервисе, он «научается» им пользоваться, и может построить XML-запрос к сервису для получения требуемой услуги, и послать его с помощью протокола SOAP. Сервис, приняв запрос от клиента, выполнит «по меньшей мере, одно» действие, сформулирует результат в формате XML, и отправит с помощью того же SOAP назад, клиенту. Таким образом, запрошенная потребителем у поставщика услуга будет исполнена, и клиенту остается, в соответствии с уже изученным описанием интерфейса сервиса, разобрать ответ и воспользоваться необходимыми данными.
Область применения веб-сервисов просто фантастично огромна, и описывать её нет никакого смысла. Приведу просто еще один пример. Предположим, что есть четыре различных предприятия, и они имеют собственные корпоративные информационные системы, написанные с использованием различных технологий. Одна написана на C# и является веб-приложением, другая создана при помощи Java, третья — старая-добрая 1С-ка, а четвертая — настольное приложение на Delphi.
Эти четыре предприятия создают холдинг, и выделяют штат в управляющую компанию. Управляющая компания принимает решение вести свой курс обмена иностранной валюты, отличный от курса ЦБ РФ. Каким образом можно ежедневно и неоднократно в течении дня изменять курс валют во всех информационных системах каждого предприятия, и не терять времени на бумажную волокиту, звонки, согласования и четырехкратный ввод данных в четыре различных системы? Решение напрашивается само собой: пусть управляющая компания ведет базу данных курсов, и пусть некий веб-сервис предоставляет интерфейс по получению текущего курса валют, а каждая из информационных систем, используя собственные механизмы работы с SOAP, запрашивает у сервиса значение курса и использует его.
В следующих статьях я попытаюсь подробно описать механизм создания подобной системы. Разумеется, она будет сильно упрощена, но это лишь для того, чтобы останавливаться на вопросах разработки именно сервиса, а не нудных деталях реализации конкретной задачи.
В работе будут использоваться Visual Studio 2010, SQL Server Express и Embarcadero Delphi XE2.