
- •Введение
- •1 Тема 1. Предметная область и терминология РСОС
- •1.1 Этапы развития распределенных систем
- •1.1.1 Классификация систем обработки данных
- •1.1.2 Распределенные вычислительные сети
- •1.1.3 Объектные распределенные системы
- •1.2 Становление систем с сервис-ориентированной архитектурой
- •1.2.1 Развитие web-технологий
- •1.2.2 Развитие концепции SOA
- •1.3 Современные парадигмы сервис-ориентированных архитектур
- •1.3.1 Эталонная модель SOA
- •1.3.2 Модель Захмана
- •1.3.3 Концепция среды открытой системы
- •1.3.4 Бизнес-парадигма модели SOA
- •1.4 Программная платформа Java Enterprise Edition
- •1.4.1 Контейнеры и компоненты Java EE
- •1.4.2 Служебные сервисы контейнеров
- •1.4.3 Артефакты контейнеров
- •1.4.4 Аннотации и дескрипторы развертывания
- •1.4.5 Управляемые компоненты платформы Java EE
- •1.5 Инструментальные средства реализации РСОС
- •1.5.1 Сервера приложений
- •1.5.2 Микросервисы
- •1.5.3 Apache Maven — сетевая сборка приложений
- •1.5.4 Eclipse Enterprise Edition
- •1.5.5 Тестовый пример
- •1.6 Заключение по первой главе
- •1.6.1 Итоги теоретических построений первой главы
- •1.6.2 Тематический план последующих глав
- •Вопросы для самопроверки
- •2 Тема 2. Использование компоненты JSF контейнера Web
- •2.1.1 Языки HTML, JavaScript и протокол HTTP
- •2.1.2 Серверные технологии PHP и HttpServlet
- •2.1.3 Технология AJAX и компонента JavaServer Faces
- •2.2 Шаблон проектирования MVC
- •2.2.1 Контроллер FacesServlet и жизненный цикл запроса
- •2.2.2 Контекст состояния запроса FacesContext
- •2.2.3 Модель в виде компонентов-подложек
- •2.2.4 Представление (View) средствами Facelets
- •2.2.5 JSF OmniFaces
- •2.3 Реализация тестового примера средствами JSF
- •2.3.1 Создание Facelets-шаблона изучаемой дисциплины
- •2.3.2 Прямая реализация тестового примера
- •2.4 Реализация уровня интерфейса сервисов
- •2.4.2 Компонента Users с ЖЦ @ApplicationScoped
- •2.4.3 Компонента RSOS с ЖЦ @SessionScoped
- •2.4.4 Компоненты-подложки с ЖЦ @RequestScoped
- •2.4.5 Приложение авторизации пользователя
- •2.4.6 Компонента подзаголовка проекта
- •2.4.7 Компонента меню лабораторных работ
- •2.4.8 Второй вариант меню лабораторных работ
- •Вопросы для самопроверки
- •3 Тема 3. Современные способы доступа к данным
- •3.1 Учебная инфраструктура темы
- •3.1.1 Учебная задача Letters (Письма)
- •3.1.2 Корпоратиные EJB-компоненты
- •3.1.3 Тестовый HttpServlet проекта lab4
- •3.1.4 Инфраструктура сервера TomEE и СУБД Derby
- •3.2 Технология JPA
- •3.2.1 Сущности
- •3.2.2 Объектно-реляционное отображение
- •3.2.3 Манеджер сущностей
- •3.2.4 Пример использования не-JTA-типа транзакций
- •3.3 Транзакции управляемые контейнером
- •3.3.1 Объектно-ориентированные запросы Criteria API
- •3.3.2 Реализация EJB-компонента с JTA-типом транзакций
- •3.3.3 Реализация JPA-сервлета
- •Вопросы для самопроверки
- •4 Тема 4. Обработка документов XML и JSON
- •4.1 Технология JAXB
- •4.1.1 Программное обеспечение технологии JAXB
- •4.1.2 Аннотации для связывания объектов Java
- •4.1.3 Преобразование объекта Java в документ XML
- •4.2 Технология JSON
- •4.2.1 Программное обеспечение технологии JSON
- •4.2.2 Преобразование объекта Java в документ JSON
- •4.2.3 Пример представления JSON на уровне классов
- •4.2.4 Выводы по результатам изучения главы 4
- •Вопросы для самопроверки
- •5 Тема 5. Web-службы SOAP
- •5.1.1 Протоколы и языки Web-служб
- •5.1.2 Краткое описание языка WSDL
- •5.1.3 Краткое описание протокола SOAP
- •5.1.4 Необязательный реестр Web-служб — UDDI
- •5.1.5 Программные пакеты Java EE, обслуживающие SOAP
- •5.2 Создание Web-служб SOAP
- •5.2.1 Подготовка проекта lab7
- •5.2.2 Аннотации поставщика Web-сервиса
- •5.2.3 Обработка исключений поставщика Web-сервиса
- •5.2.4 Обработка контекста Web-сервиса
- •5.3 Создание потребителя Web-службы SOAP
- •5.3.1 Аннотации для потребителей сервиса
- •5.3.2 Использование утилиты wsimport
- •5.3.3 Реализация тестового примера
- •5.3.4 Выводы по результатам изучения главы 5
- •Вопросы для самопроверки
- •6 Тема 6. Web-службы в стиле REST
- •6.1 Основные положения технологии RESTful
- •6.1.1 Ресурсы, URI, представления и адресуемость
- •6.1.2 Протокол HTTP
- •6.1.3 Языки WADL и HAL
- •6.1.4 Технология JAX-RS
- •6.2 Реализация Web-службы в стиле REST
- •6.2.1 Преобразование сущности Letter
- •6.2.2 Реализация EJB-компоненты Lets9
- •6.2.3 Получение списка записей в формате XML
- •6.2.4 Получение записи по номеру индентификатора
- •6.2.5 Добавление новой записи
- •6.3 Вызов Web-служб в стиле REST
- •6.3.1 Инструментальные средства потребителя сервиса
- •6.3.2 Полная реализация RESTfull-сервиса
- •6.3.3 Шаблон реализации потребителя сервиса
- •6.3.4 Клиент, реализующий методы GET и POST
- •6.3.6 Клиент, реализующий методы DELETE и PUT
- •Вопросы для самопроверки
- •Заключение
- •Список использованных источников
- •Алфавитный указатель

3) подраздел 6.3 — показывает возможности потребителей сервиса.
6.1 Основные положения технологии RESTful
Web-службы, построенные с учетом ограничений REST-технологий, называются RESTfulсистемами.
В отличие от Web-сервисов, построенных на основе протокола SOAP, RESTful-системы не имеют официального стандарта на свое API, поэтому принято считать, что — это архитектурный стиль программирования.
RESTful — это архитектурный стиль проектирования и реализации сер- вис-ориентированных систем.
Считается, что во многом идейной парадигмой технологии REST стала стандартная классификация действий по работе с базами данных CRUD, которая была введена Джеймсом Мартином в 1983 году.
CRUD — это акроним, обозначающий четыре базовых действия (функций) для работы с базами данных:
1)CREATE — создание записей (INSERT);
2)READ — чтение записей (SELECT);
3)UPDATE — модификация записей;
4)DELETE — удаление записей.
Применительно к Web-службам, термин CRUD проецируется на четыре HTTP-запроса к Web-серверам:
1)POST — запрос на создание ресурса;
2)GET — запрос на получение ресурса;
3)PUT — запрос на модификацию ресурса;
4)DELETE — запрос на удаление ресурса.
Сам термин REST был введен Роем Филдингом в 2000 году и упоминается в ключе его докторской диссертации: «Архитектурные стили и дизайн сетевых программных архитектур». Им было предложено и шесть ограничений, нарушение которых не позволяет считать сервис-приложение REST-системой:
1.Модель «Клиент-сервер» — предполагается приведение приложения, возможно целостного по начальной реализации, к архитектуре, где выделены поставщик сервиса и потребители сервиса. Это улучшает мастабируемость приложения и позволяет отдельным частям развиваться независимо друг от друга.
2.Отсутствие состояния — обеспчение на стороне сервера протокола взаи-
234

модействия без сохранения состояния. При этом, состояние сессии должно сохраняться на стороне клиента (потребителя сервиса).
3.Кэширование ответов сервера — способность сервера или промежуточных узлов кэшировать свои ответы. Это позволяет повысить производительность и расширяемость системы.
4.Единообразие интерфейсов сервисов — фундаментальное требование дизайна REST-сервисов. Унификация интерфесов должна соответствовать четырем дополнительным условиям: идентификации ресурсов посредством URI; возможности манипуляции ресурсов на основе представлений; использованию «самозаписываемых» сообщений и применению гипермедиа как средства изменения состояния приложения.
5.Слои взаимодействия — использование взаимодействия клиента и сервера на основе иерархической структуры сетей.
6.Код по требованию (необязательное ограничение) — возможность расширения функциональности клиентов за счет загрузки кода с серверов приложений в виде апплетов или сценариев.
По мнению Роя Филдинга, приложения, не соответствующие приведенным условиям, не могут называться REST-приложениями.
По мнению Филдинга, приложения, которые соответствуют указанным выше шести условиям, получают следующие преимущества:
а) надежность по причине отсутствия необходимости сохранять информацию о состоянии клиента, поскольку она может быть утеряна;
б) производительность за счет использования кэша и масштабируемость
за счет разделения поставщиков и потребителей сервисов;
в) простота интерфейсов и портативность компонентов создаваемых сервисных систем;
г) легкость внесения изменений и способность «эволюционировать» под воздействием новых требований к системам.
Основной недостаток REST-технологий — отсутствие формальной стандартизации, четко ограничивающей их объективное присутствие.
Имеющиеся недостатки REST-технологий являются продолжением их преимуществ. Действительно, REST-технологии полностью ориентированы на использование только Web-технологий, что в конечном итоге приводит к существенному развитию последних, но ограничивает первых.
235

Чтобы не впадать в крайности популистских утверждений, рассмотрим заявленную тематику данного подраздела только в следующих трех аспектах:
1)общие понятия и обозначения изучаемой тематики в планах ресурсов, адресации и других представлений, используемых в теоретических описаниях технологий REST;
2)возможности протокола HTTP и перспективы использования языка WADL;
3)описание технологии JAX-RS, как основного инструментального средства реализации конкретных REST-систем посредством программной платформы Java EE.
6.1.1 Ресурсы, URI, представления и адресуемость
Базовым понятием Web-технологий является понятие ресурса.
REST-технологии можно рассматривать как дальнейшее развитие Webтехнологий применительно к распределенным сервис-ориентированным системам. Соответственно, в REST-технологиях, в явном или неявном виде, присутствуют такие понятия как ресурсы, URI/URN, представления и адресуемость.
Ресурс — это зонтичный термин, обозначающий любую сущность, на которую клиент (потребитель сервиса) может поставить ссылку или с которой он пытается или может попытаться взаимодействовать. В такой интерпретации, ресурсы могут обозначать что угодно: файлы в файловой системе, базу данных, сайт или любую информацию, которая попала в поле зрения пользователя.
URI (Uniform Resource Identifier) — унифицированный или единообразный идентификатор ресурса, имеющий две базовые интерпретации:
1)URL (Uniform Resource Locator) — система унифицированных адресов электронных ресурсов, которая в современном понимании соответствует понятию URI;
2)URN (Uniform Resource Name) — единообразное название или имя ресурса, которые не включают в себя указания на местонахождение и способ обращения к ресурсу.
Что касается тематики REST-технологий, то под URI понимается именно URL, указывающий на местоположение ресурса в формате:
http://host:port/path?queryString#fragment, где http — протокол соединения с ресурсом;
host — это DNS-имя или IP-адрес ресурса;
port — необязательная часть формата, указывающая порт соединения примени-
236

тельно к стеку протоколов TCP/IP;
path — это относительный адрес ресурса в пределах файловой системы сервера, использующий разделительный знак «/»;
queryString — необязательной список параметров, представленных в форме «имя=значение», где разделительным символом между такими парами является знак «&»;
fragment — это указатель на конкретное место в документе.
Указанный формат URI соответствует методу GET протокола HTTP, используемого в классических интерпретациях Web-технологий.
Обратите внимание, что это всего лишь один из методов протокола HTTP, который способен полностью отображаться в адресной строке браузеров. Это создает впечатление простоты понимания самой адресации, что пропагандируется Роем Филдингом, но реально применяется только в простейших запросах и то — на английском языке.
С другой стороны, сам адрес не обязательно нужно отображать на HTMLстраницах, читаемых пользователями сервисов. Этот адрес может быть скрыт и заменен подходящими именами, характеризующими ресурс на национальных языках пользователей Интернет. Такой подход широко используется на практике, что подчеркивает хорошую адаптируемость стиля REST.
Представления — это характеристики форматов тех сущностей, которые адресуются с помощью URI.
Компьютерные технологии, включая технологии WEB, разработали множество форматов представления информации. В настоящее время, общепринятым способом обозначения различных представлений являются MIME-типы.
MIME (Multipurpose Internet Mail Extensions) — это многоцелевые расширения интернет-почты, ставшие стандартом, описывающим спецификации для кодирования информации и форматирования сообщений. Базовый набор таких спецификаций определен в ряде документов: RFC 2045, RFC 2046,
RFC 4288, RFC 4289 и RFC 4855.
Официальный список всех MIME-типов публикуется Администрацией адресного пространства Интернет, сокращенно обозначаемого IANA (Internet Assigned Numbers Authority).
Адресуемость — основной принцип проектирования Web-служб в стиле RESTful.
Идея адресуемости — достаточно проста. Если меется сетевой объект, с которым работает потребитель сервиса, то такая сущность должна иметь кон-
237