Лекция №26Сервисная архитектура приложений
Веб-сервисы — один из способов достижения интероперабельности в распределенных приложениях, основанный на использовании в качестве промежуточного слоя (middleware) стандартные протоколы передачи данных (например, HTTP). Под сервисом подразумевается программная система с возможностью взаимодействия с другими программами через сеть, для которой заданы интерфейс и протокол сообщений для обмена данными.
Благодаря относительной простоте реализации веб-сервисов по сравнению с другими распределенными архитектурами, они пользуются большой популярностью при разработке программных систем, состоящих из слабо связанных компонентов.
Выделяют два основных типа веб-сервисов в зависимости от используемых технологий:
- SOAP-сервисы, основанные на стандартах для веб-сервисов, разработанных международным консорциумом W3C. Этот вид сервисов более сложен в разработке и использовании, поэтому применяется в тех случаях, когда важно соблюдение стандартов и высокая степень формализации. Одна из основных областей применения SOAP-сервисов — коммерческие (enterprise) системы.
- REST-сервисы, использующие для передачи данных методы протокола HTTP (GET, PUT, POST и DELETE). В отличие от SOAP-сервисов, интерфейс REST-сервисов чаще всего определяется неформально; при передаче данных используются стандарты (де)сериализации XML, JSON, YAML и другие. Характерный вариант применения REST-сервисов — доступ к API в веб-приложениях; простота сервисов упрощает их интеграцию (web mashup).
SOAP-сервисы
SOAP-сервисы используют два базовых стандарта, основанных на XML:
- SOAP — стандарт передачи данных поверх высокоуровневых протоколов (например, HTTP). Помимо данных, веб-сервисам могут передаваться заголовки, используемые, например, для аутентификации или для описания приоритета запросов.
- WSDL — формат описания интерфейса и реализации веб-сервисов. Интерфейс веб-сервиса представляет собой набор операций (аналог методов для объектов), для каждой из которых определена структура входящего и выходящего сообщений. Реализация сервиса представляет собой одну или более привязок (binding), которые определяют способ вызова операций.
Помимо этих стандартов, для веб-сервисов определены вспомогательные технологии, такие как безопасность данных. Для интеграции SOAP-сервисов разработан язык WS-BPEL (тоже основан на XML), позволяющий запрашивать и обрабатывать данные для произвольного числа сервисов. Средства для реализации и использования сервисов входят, например, в Java EE и Microsoft .NET.
REST
Технология REST (representational state transfer) подразумевает некоторые ограничения на архитектуру сервиса, помогающие добиться лучшей производительности и масштабируемости. Например, REST-сервис при общении с клиентом не должен хранить состояние после выполнения операций (такое поведение отличает сервисы от объектов в ООП). Это позволяет использовать прозрачные для клиента прокси-сервисы, например, с целью балансирования нагрузки. Другая особенность REST-сервисов — полноценное использование протокола HTTP:
- Адрес запроса (URI) и метод HTTP (GET, PUT, POST, DELETE) совместно определяют операцию веб-сервиса. GET обычно означает возвращение сериализованного представления ресурса, определяемого адресом запроса; PUT может означать замену ресурса, POST — добавление, DELETE — удаление.
- Тип возвращаемых данных определяется заголовком HTTP Content-Type. На тип данных можно повлиять, задав желаемые типы в заголовке запроса Accept.
- Код HTTP может сигнализировать об ошибке при составлении запроса или его обработке на сервере.
- Для некоторых запросов имеет смысл кэшировать возвращаемые данные при помощи соответствующих заголовков.
REST-сервисы можно легко создавать в рамках веб-приложений при использовании архитектуры Model — View — Controller. Существуют и специализированные средства для разработки (например, JAX-RS в Java EE). Для использования веб-сервисов достаточно реализации HTTP-протокола (например, на основе libcurl) и инструментов для (де)сериализации данных.