Skip to content

Simpliest web-library: Spring, JSP, REST, tests (2014)

License

Notifications You must be signed in to change notification settings

aleksey-lukyanets/library

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Библиотека — простое клиент-серверное приложение, которое позволяет хранить, просматривать, изменять списки авторов и книг в базе данных. Благодаря применению JavaScript (jQuery, AJAX, JSON, см. main.js) для асинхронного обращения к серверу, все операции выполняются без обновления страницы.

Технологии

Приложение разработано на Java с использованием технологий:

  • сервлет: Spring MVC, JavaServer Pages;
  • доступ к данным и валидация: JPA, Hibernate;
  • тесты: Spring Test, JUnit, Mockito, Hamcrest, JSONPath;
  • веб-интерфейс: jQuery, AJAX, Bootstrap;
  • база данных: PostgreSQL;
  • контейнер сервлетов: Apache Tomcat.

REST-интерфейс приложения

Архитектура веб-слоя приложения реализована в соответствии со стилем REST. Описание методов доступа приведено на отдельной странице.

Обработка исключений

Исключительные ситуации, возникающие в приложении, обрабатываются через создание, трансляцию и обработку исключений. Обработка пользовательских вынесена в единый класс library.exception.RestExceptionHandler, где в ответ сервера добавлются необходимые данные и статусы (включая ясные для восприятия описания ошибок валидации объекта, переданного запросом POST).

Работа с необрабатываемыми исключениями доверена классу SimpleMappingExceptionResolver Spring, который возвращает клиенту статус 500 Internal Server Error при возникновении такого рода исключений.

Тесты

Приложение включает 18 модульных тестов для классов-контроллеров и 20 интеграционных тестов, работающих с тестовым набором данных из БД. Сравнение ответов сервера производится средствами Hamcrest и JSONPath, в модульных тестах используются объекты-заглушки Mockito.

Модель базы данных

схема базы данных

REST-интерфейс приложения

REST-интерфейс предоставляет доступ к ресурсам приложения, обмен данными производится в формате JSON. Для наглядности некоторые поля объектов (страна у автора, автор у книги) используют текстовые строки вместо идентификаторов.

Результат всех GET-запросов доступен для просмотра через веб-браузер. Так обращение к ресурсу /countries возвращает список стран:

[
{"id": 1, "title": "Германия"},
{"id": 2, "title": "Дания"},
{"id": 3, "title": "Россия"},
{"id": 4, "title": "США"}
]

Запросы POST и DELETE можно выполнить любым REST-клиентом.

Обратная связь

Все запросы возвращают в заголовке ответа информацию о результате их исполнения.

Запрос на добавление нового автора может выглядеть так:

заголовок:   Content-Type: application/json; charset=UTF-8
тело: {"id": 0, "name": "Лев Толстой", "country": "Россия"}

Ответ приложения:

заголовок:   Status Code: 201 Created
Content-Type: application/json; charset=UTF-8
Location: http://library.jelasticloud.com/authors/8
тело: {"id": 8, "name": "Лев Толстой", "country": "Россия"}

Запрос на добавление книги с некорректным именем автора:

заголовок:   Content-Type: application/json; charset=UTF-8
тело: {"id": 0, "author": "абв", "title": "Анна Каренина"}

Ответ приложения:

заголовок:   Status Code: 406 Not Acceptable
Content-Type: application/json; charset=UTF-8
тело: {
"fieldErrors":
[{"field": "author", "message": "Неизвестный автор."}]
}

Операции с ресурсами

Авторы
ресурс описание статусы ответа
GET /authors Возвращает перечень авторов. 200
GET /authors/:id Возвращает автора с указанным id. 200 — автор возвращён в теле ответа,
404 — автора с указанным id не существует
GET /authors/:id/books Возвращает список книг автора с указанным id. 200 — книги возвращены в теле ответа,
404 — автора с указанным id не существует
POST /authors Добавляет нового автора. В теле ответа возвращает созданного автора, в заголовке - ссылку на созданный ресурс. 201 — автор создан,
406 — автор с таким именем уже существует,
422 — некорректные параметры автора (длина имени или названия страны)
DELETE /authors/:id Удаляет автора с указанным id и возвращает его в теле ответа. 200 — автор удалён,
404 — автора с таким id не существует
Книги
ресурс описание статусы ответа
GET /books Возвращает перечень книг всех авторов. 200
GET /books/:id Возвращает перечень книг всех авторов. 200 — книга возвращена в теле ответа,
404 — книги с таким id не существует
POST /books Добавляет новую книгу. В теле ответа возвращает созданную книгу, в заголовке - ссылку на созданный ресурс. 201 — книга создана,
406 — книга с таким названием уже существует у указанного автора,
422 — некорректные параметры книги (длина имени автора или названия книги)
DELETE /books/:id Удаляет книгу с указанным id и возвращает её в теле ответа. 200 — книга удалена,
404 — книги с таким id не существует
Страны
ресурс описание статусы ответа
GET /countries Возвращает перечень стран. 200

About

Simpliest web-library: Spring, JSP, REST, tests (2014)

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published