/soa-lab1

Сервис-ориентированная архитектура (ИТМО, ПИиКТ-СиППО, 4 курс).

Primary LanguageJava

Лабораторная работа #1 Сервис-ориентированная архитектура

Разработать веб-сервис на базе сервлета, реализующий управление коллекцией объектов, и клиентское веб-приложение, предоставляющее интерфейс к разработанному веб-сервису. В коллекции необходимо хранить объекты класса City, описание которого приведено ниже:.

public class City {
    private Long id; //Поле не может быть null, Значение поля должно быть больше 0, Значение этого поля должно быть уникальным, Значение этого поля должно генерироваться автоматически
    private String name; //Поле не может быть null, Строка не может быть пустой
    private Coordinates coordinates; //Поле не может быть null
    private java.time.ZonedDateTime creationDate; //Поле не может быть null, Значение этого поля должно генерироваться автоматически
    private float area; //Значение поля должно быть больше 0
    private int population; //Значение поля должно быть больше 0
    private int metersAboveSeaLevel;
    private Double timezone; //Значение поля должно быть больше -13, Максимальное значение поля: 15
    private Government government; //Поле не может быть null
    private StandardOfLiving standardOfLiving; //Поле может быть null
    private Human governor; //Поле может быть null
}
public class Coordinates {
    private Integer x; //Значение поля должно быть больше -60, Поле не может быть null
    private Long y; //Максимальное значение поля: 498, Поле не может быть null
}
public class Human {
    private double height; //Значение поля должно быть больше 0
    private java.time.LocalDateTime birthday;
}
public enum Government {
    CORPORATOCRACY,
    PUPPET_STATE,
    NOOCRACY,
    TELLUROCRACY;
}
public enum StandardOfLiving {
    ULTRA_HIGH,
    HIGH,
    MEDIUM,
    LOW;
}
  1. Веб-сервис должен удовлетворять следующим требованиям:

    • API, реализуемый сервисом, должен соответствовать рекомендациям подхода RESTful.

    • Необходимо реализовать следующий базовый набор операций с объектами коллекции: добавление нового элемента, получение элемента по ИД, обновление элемента, удаление элемента, получение массива элементов.

    • Операция, выполняемая над объектом коллекции, должна определяться методом HTTP-запроса.

    • Операция получения массива элементов должна поддерживать возможность сортировки и фильтрации по любой комбинации полей класса, а также возможность постраничного вывода результатов выборки с указанием размера и порядкового номера выводимой страницы.

    • Все параметры, необходимые для выполнения операции, должны передаваться в URL запроса.

    • Данные коллекции, которыми управляет веб-сервис, должны храниться в реляционной базе данных.

    • Информация об объектах коллекции должна передаваться в формате xml.

    • В случае передачи сервису данных, нарушающих заданные на уровне класса ограничения целостности, сервис должен возвращать код ответа http, соответствующий произошедшей ошибке.

    • Веб-сервис должен быть "упакован" в веб-приложение, которое необходимо развернуть на сервере приложений WildFly.

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

    • Вернуть массив объектов, значение поля name которых содержит заданную подстроку.

    • Вернуть массив объектов, значение поля metersAboveSeaLevel которых больше заданного.

    • Вернуть массив уникальных значений поля metersAboveSeaLevel по всем объектам.

    Эти операции должны размещаться на отдельных URL.

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

    • Клиентское приложение может быть написано на любом веб-фреймворке, который можно запустить на сервере helios.

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

    • Клиентское приложение должно преобразовывать передаваемые сервисом данные в человеко-читаемый вид -- параграф текста, таблицу и т.д.

    • Клиентское приложение должно информировать пользователя об ошибках, возникающих на стороне сервиса, в частности, о том, что сервису были отправлены невалиданые данные.

1