Серверная часть отвечает за обработку запросов, хранение и обработку данных, а также управление логикой приложения. В данном разделе будет рассмотрено создание серверной части для приложения по продаже авиабилетов на Spring.
Spring — это один из самых популярных фреймворков для разработки веб-приложений на языке Java. Он предоставляет множество инструментов и библиотек, которые позволяют создавать масштабируемые и безопасные приложения. Создание серверной части на Spring позволяет использовать множество функций, таких как интеграция с базами данных, управление сеансами, авторизация и аутентификация пользователей, обработка ошибок и многое другое.
Приложение построено на основе чистой архитектуры, что позволяет разделить обязанности и наиболее простым образом управлять большим объемом данных.
Обеспечение безопасной авторизации пользователей в API играет решающую роль в защите данных и предотвращении несанкционированного доступа. Правильная реализация этой функциональности обеспечивает сохранность конфиденциальной информации и поддерживает доверие пользователей к системе.
Выбор Spring Security и JWT (JSON Web Token) в этом контексте является стратегическим. Spring Security предоставляет мощные инструменты для управления аутентификацией и авторизацией, позволяя создать гибкую и надежную систему защиты. JWT, в свою очередь, обеспечивает безопасный обмен данными между сервером и клиентом, предоставляя механизм токенов, которые могут быть проверены и декодированы для подтверждения авторизации пользователя.
Использование Spring Security с JWT позволяет не только защитить API от несанкционированного доступа, но и создать масштабируемую и эффективную систему, которая удовлетворяет современные стандарты безопасности в веб-разработке.
Рассмотрим схему авторизации (рисунок 1).
Рисунок 1. Диаграмма аутентификации
Пользователь отправляет запрос на сервер. Далее вызывается фильтр аутентификации, который проверяет наличие JWT-токена и его выполняет поиск пользователя в базе данных при помощи сервиса проверки токена. В случае провала возвращается ответ с кодом 403 Unauthorized.
Если же токен корректный и активный, то сервис продолжает выполнение, обновляет контекст безопасности и в итоге возвращает пользователю данные с кодом ответа 200 Ok.
Также есть некоторые конечные точки, которые доступны без авторизации. Например, ссылки для регистрации и авторизации, а также секция с документацией OpenAPI и Swagger (рисунок 6).
Для хранения информации был сделан выбор в пользу MySQL — это система управления реляционными базами данных, которая используется для хранения и управления большими объемами данных. Она является одной из самых популярных и широко используемых СУБД в мире благодаря своей простоте использования, надежности и гибкости.
Для разработки модели данных использован MySQL Workbench. Данный бесплатный продукт позволяет быстро, эффективно и наглядно разработать базу данных для собственных целей. Разработанная база данных находится в третьей нормальной форме, что позволяет достичь высокой производительности при отличной читаемости диаграмм.
При разработке данного приложения был сделан выбор в пользу применения объектно-ориентированной парадигмы для организации и хранения данных. Для этого внедрены классы, которые отображают необходимую информацию в системе. Эти классы, созданные и структурированные в соответствии со схемой, предоставляют абстракцию данных и предоставляют интерфейс для их управления и обработки.
В качестве механизма взаимодействия с базой данных выбран JDBC (Java Database Connectivity), что обеспечивает эффективное и надежное взаимодействие с различными реляционными базами данных из приложения, написанного на языке программирования Java. JDBC предоставляет набор API и инструментов для выполнения запросов к базе данных, обеспечивая тем самым стабильную интеграцию и эффективную передачу данных между приложением и хранилищем данных.
Документация играет ключевую роль в разработке программного обеспечения, являясь надёжным источником информации для разработчиков, пользователей и других заинтересованных сторон. Она дает понимание того, как использовать, настраивать и интегрировать программные продукты. Одним из мощных инструментов для создания такой документации является спецификация OpenAPI. OpenAPI — это формат описания интерфейсов RESTful API, который позволяет описывать функции, структуру запросов, ответов и другие аспекты API. Его использование упрощает создание, понимание и использование API, делая документацию более доступной и понятной для разработчиков. (рисунок 2)
Рисунок 2. Документация к приложению
Swagger автоматически генерирует визуальное представление API, позволяя разработчикам и пользователям легко понять, как взаимодействовать с сервисом.
Одним из ключевых преимуществ Swagger является создание интерактивной документации, которая позволяет отправлять запросы к API прямо из документации, просматривать доступные конечные точки, параметры запросов и структуру ответов. Это упрощает процесс разработки, отладки и использования API, делая его более доступным для широкого круга пользователей.
Контейнеризация стала неотъемлемой частью разработки программного обеспечения, обеспечивая удобство и портативность в развертывании приложений. В этой главе мы углубимся в процесс контейнеризации Java-приложения.
В данной работе приложение контейнеризировано при помощи docker compose. Это инструмент для определения и запуска многоконтейнерных Docker приложений. Он позволяет определить сервисы, их зависимости и настройки в файле YAML, что делает управление и запуск группы контейнеров проще и более удобным.
С помощью Docker Compose возможно описать структуру приложения, включая сервисы, их параметры, сетевые настройки, а также другие аспекты, и запустить их все одной командой. Это особенно удобно, когда у есть приложение, состоящее из нескольких связанных сервисов, которые должны работать вместе.
Список литературы
- Строганкова, Н. В. Шаблоны программных платформ языка Java : учебное пособие / Н. В. Строганкова, К. В. Касьяненко, А. В. Хозяинов ; составители практикума входят: использование. — Москва : РТУ МИРЭА, 2021. — 83 с. — Текст : электронный // Лань : электронно-библиотечная система. — URL: https://e.lanbook.com/book/182466 (дата обращения: 22.11.2023). — Режим доступа: для авториз. пользователей.
- Лоре, А. Проектирование веб-API : руководство / А. Лоре ; перевод с английского Д. А. Беликова. — Москва : ДМК Пресс, 2020. — 440 с. — ISBN 978-5-97060-861-6. — Текст : электронный // Лань : электронно-библиотечная система. — URL: https://e.lanbook.com/book/179498 (дата обращения: 22.11.2023). — Режим доступа: для авториз. пользователей.
- Swagger. — Текст : электронный // habr : [сайт]. — URL: https://habr.com/ru/articles/541592/ (дата обращения: 22.12.2023).