Задача — разработать REST-сервис. Сервис должен предоставить REST-интерфейс для загрузки файлов и вывода списка уже загруженных файлов пользователя.
Все запросы к сервису должны быть авторизованы. Заранее подготовленное веб-приложение (FRONT) должно подключаться к разработанному сервису без доработок, а также использовать функционал FRONT для авторизации, загрузки и вывода списка файлов пользователя.
- Сервис должен предоставлять REST-интерфейс для интеграции с FRONT.
- Сервис должен реализовывать все методы, описанные в yaml-файле:
- Вывод списка файлов.
- Добавление файла.
- Удаление файла.
- Авторизация.
- Все настройки должны вычитываться из файла настроек (yml).
- Информация о пользователях сервиса (логины для авторизации) и данные должны храниться в базе данных (на выбор студента).
- Приложение разработано с использованием Spring Boot.
- Использован сборщик пакетов gradle/maven.
- Для запуска используется docker, docker-compose.
- Код размещён на Github.
- Код покрыт unit-тестами с использованием mockito.
- Добавлены интеграционные тесты с использованием testcontainers.
- Изучите протокол получения и отправки сообщений между FRONT и BACKEND.
- Нарисуйте схему приложений.
- Опишите архитектуру приложения, где хранятся настройки и большие файлы, структуры таблиц/коллекций базы данных.
- Создайте репозиторий проекта на Github.
- Напишите приложение с использованием Spring Boot.
- Протестируйте приложение с помощью curl/postman.
- Протестируйте приложение с FRONT.
- Напишите README.md к проекту.
- Отправьте на проверку.
- Установите nodejs (версия не ниже 19.7.0) на компьютер, следуя инструкции.
- Скачайте FRONT (JavaScript).
- Перейдите в папку FRONT приложения и все команды для запуска выполняйте из неё.
- Следуя описанию README.md FRONT проекта, запустите nodejs-приложение (
npm install
,npm run serve
). - Далее нужно задать url для вызова своего backend-сервиса.
- В файле
.env
FRONT (находится в корне проекта) приложения нужно изменить url до backend, например:VUE_APP_BASE_URL=http://localhost:8080
.- Нужно указать корневой url вашего backend, к нему frontend будет добавлять все пути согласно спецификации
- Для
VUE_APP_BASE_URL=http://localhost:8080
при выполнении логина frontend вызоветhttp://localhost:8080/login
- Запустите FRONT снова:
npm run serve
. - Изменённый
url
сохранится для следующих запусков.
- В файле
- По умолчанию FRONT запускается на порту 8080 и доступен по url в браузере
http://localhost:8080
.- Если порт 8080 занят, FRONT займёт следующий доступный (
8081
). После выполненияnpm run serve
в терминале вы увидите, на каком порту он запустился.
- Если порт 8080 занят, FRONT займёт следующий доступный (
FRONT-приложение использует header auth-token
, в котором отправляет токен (ключ-строка) для идентификации пользователя на BACKEND.
Для получения токена нужно пройти авторизацию на BACKEND и отправить на метод /login логин и пароль. В случае успешной проверки в ответ BACKEND должен вернуть json-объект
с полем auth-token
и значением токена. Все дальейшие запросы с FRONTEND, кроме метода /login, отправляются с этим header.
Для выхода из приложения нужно вызвать метод BACKEND /logout, который удалит/деактивирует токен. Последующие запросы с этим токеном будут не авторизованы и вернут код 401.
Обратите внимание, что название самого параметра (как и всех параметров в спецификации), его регистр имеют значение.
Важно, чтобы ваш backend возвращал токен в поле auth-token
– если поле будет называться authToken
или authtoken
, фронт не сможет найти токен и дальше логина процесс не пройдёт.
Чтобы FRONT смог обратиться к вашему серверу, необходимо настроить CORS в вашем приложении. Например, можно сделать это, добавив конфигурацию:
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
@EnableWebMvc
class WebConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowCredentials(true)
.allowedOrigins("http://localhost:8081")
.allowedMethods("*");
}
}
где адрес в параметре allowedOrigins
– это адрес фронта.
Это итоговый проект, где вы будете использовать все полученные вами знания не только в написании кода, но и в поиске информации, в траблшутинге и т.д. Используйте все доступные вам инструменты, чтобы решить возникающие проблемы:
- Используйте консоль разработчика в браузере, вкладка Network. Она позволит вам увидеть, какой запрос отправляет фронт, какие параметры и url он использует, какой ответ он получает.
- Используйте дебаг в IDEA, чтобы увидеть весь процесс обработки запроса вашим приложением.
- Используйте интернет для поиска стандартных подходов, гайдов, распространённых ошибок. Все проблемы уже были решены до нас.
- Попробуйте найти ответ в лекциях, материалах и домашних заданиях курса. После этого воспользуйтесь Google. В случае любой сложности вы можете задать вопрос дипломному руководителю. Но лучше сначала попытаться решить проблему самостоятельно.
- В одном вопросе лучше описывать одну проблему. Так ответ дипломного руководителя будет максимально эффективным и полезным.
- По возможности прикрепляйте к вопросу скриншоты и стрелочкой показывайте, где не получается. Программу для этого можно скачать здесь.
- По возможности задавайте вопросы в комментариях к коду.
- Начинайте работу над дипломом как можно раньше, чтобы было больше времени на правки.
- Делайте диплом по частям, а не всё сразу. Так вы сможете оперативно внести правки, и не придётся переделывать большую часть работы.