Skip to content

Files

4 - СОА

Сервис - ориентированная архитектура

Лабораторная работа №1

Разработать спецификацию в формате OpenAPI для набора веб-сервисов, реализующего следующую функциональность (Описана в отчете)
Веб-сервис должен удовлетворять следующим требованиям:

  • API, реализуемый сервисом, должен соответствовать рекомендациям подхода RESTful.
  • Необходимо реализовать следующий базовый набор операций с объектами коллекции: добавление нового элемента, получение элемента по ИД, обновление элемента, удаление элемента, получение массива элементов.
  • Операция, выполняемая над объектом коллекции, должна определяться методом HTTP-запроса.
  • Операция получения массива элементов должна поддерживать возможность сортировки и фильтрации по любой комбинации полей класса, а также возможность постраничного вывода результатов выборки с указанием размера и порядкового номера выводимой страницы.
  • Все параметры, необходимые для выполнения операции, должны передаваться в URL запроса.
  • Информация об объектах коллекции должна передаваться в формате json.
  • В случае передачи сервису данных, нарушающих заданные на уровне класса ограничения целостности, сервис должен возвращать код ответа http, соответствующий произошедшей ошибке.

Помимо базового набора, веб-сервис должен поддерживать следующие операции над объектами коллекции:

  • Сгруппировать объекты по значению поля meleeWeapon, вернуть количество элементов в каждой группе.
  • Вернуть массив объектов, значение поля name которых содержит заданную подстроку.
  • Вернуть массив объектов, значение поля chapter которых больше заданного.
  • Эти операции должны размещаться на отдельных URL.

Второй веб-сервис должен располагаться на URL /starship, и реализовывать ряд дополнительных операций, связанных с вызовом API первого сервиса:

/create/{id}/{name} : создать новый десантный корабль и сохранить его в БД
/{starship-id}/load//space-marine-id : погрузить выбранного десантника на корабль Эти операции также должны размещаться на отдельных URL.

Для разработанной спецификации необходимо сгенерировать интерактивную веб-документацию с помощью Swagger UI. Документация должна содержать описание всех REST API обоих сервисов с текстовым описанием функциональности каждой операции. Созданную веб-документацию необходимо развернуть на сервере helios.

Разработанная спецификация

Лабораторная работа №2

Требования к реализации и развёртыванию сервисов:

  • Первый ("вызываемый") веб-сервис должен быть реализован на фреймворке JAX-RS и развёрнут в окружении под управлением сервера приложений WildFly.
  • Второй веб-сервис должен быть реализован на фреймворке Spring MVC REST, развёрнут в окружении под управлением ещё одного экземпляра сервера приложений WildFly и вызывать REST API первого сервиса.
  • Для обоих сервисов необходимо реализовать все функции, задокументированные в API, в строгом соответствии со спецификацией!
  • Доступ к обоим сервисам должен быть реализован с по протоколу https с самоподписанным сертификатом сервера. Доступ к сервисам посредством http без шифрования должен быть запрещён.

Требования к клиентскому приложению:

  • Клиентское приложение может быть написано на любом веб-фреймворке, который можно запустить на сервере helios.
  • Приложение должно обеспечить полный набор возможностей, предоставляемых API обоих сервисов -- включая сортировку, фильтрацию и постраничный вывод элементов коллекции.
  • Приложение должно преобразовывать передаваемые сервисами данные в человеко-читаемый вид -- параграф текста, таблицу и т.д.
  • Клиентское приложение должно информировать пользователя об ошибках, возникающих на стороне сервисов, в частности, о том, что сервису были отправлены невалиданые данные.

Оба веб-сервиса и клиентское приложение должны быть развёрнуты на сервере helios.

Лабораторная работа №3

Переработать веб-сервисы из лабораторной работы #2 таким образом, чтобы они реализовывали основные концепции микросервисной архитектуры. Для этого внести в оба сервиса -- "вызываемый" и "вызывающий" перечисленные ниже изменения.

Изменения в "вызываемом" сервисе:

  • Сконфигурировать окружение для работы сервиса на платформе Spring Boot.
  • Запустить второй экземпляр сервиса на другом порту. Реализовать балансировку нагрузки между экземплярами с помощью Haproxy.
  • Реализовать механизм Service Discovery. Для этого установить Consul и интегрировать свой сервис с ним, автоматически регистрируя в момент запуска.

Изменения в "вызывающем" сервисе:

  • Разделить приложение на два модуля -- веб-приложение с веб-сервисом и EJB-jar с бизнес-компонентами.
  • Переместить всю логику из класса сервиса в Stateless EJB. В классе сервиса оставить только обращение к методам бизнес-интерфейса. EJB-компонент должен быть доступен удалённо (иметь Remote-интерфейс).
  • Сформировать на уровне сервера приложений пул компонентов EJB настраиваемой мощности, динамически расширяемый при увеличении нагрузки.
  • Настроить второй экземпляр сервера приложений на другом порту, "поднять" на нём вторую копию веб-сервиса и пула EJB.
  • Настроить балансировку нагрузки на оба запущенных узла через Haproxy.

Оба веб-сервиса и клиентское приложение должны сохранить полную совместимость с API, реализованными в рамках предыдущих лабораторных работ.

Серверное приложение: https://github.com/EgorMIt/SOA-Lab2
Клиентское приложение: https://github.com/EgorMIt/SOA-Lab2-frontend

Лабораторная работа №4

Переработать сервисы из лабораторной работы №3 следующим образом:

  • Второй ("вызывающий") сервис переписать в соответствии с требованиями протокола SOAP.
  • Развернуть переработанный сервис на сервере приложений по собственному выбору.
  • Оставшийся сервис не модифицировать, не менять его API, протокол и используемый сервер приложений.
  • Установить и сконфигурировать на сервере Helios программное обеспечение Mule ESB.
  • Настроить интеграцию двух сервисов с использованием установленного программного обеспечения.
  • Реализовать дополнительную REST-"прослойку", обеспечивающую возможность доступа к переработанному сервису клиентского приложения без необходимости его модификации.

Никакой дополнительной логики, помимо вызовов SOAP-сервиса, разработанная REST-прослойка содержать не должна.

Серверное приложение: https://github.com/EgorMIt/SOA-Lab4
Клиентское приложение: https://github.com/EgorMIt/SOA-Lab2-frontend