Серверная часть приложения java

Современная серверная разработка на языке Java: 1. Инструменты разработчика

Мы живем в интересное время – практически у каждого человека в кармане лежит небольшой компьютер, имеющий доступ в Интернет. Этот факт обеспечил появление множества востребованных интернет-сервисов. Если раньше имело смысл создавать приложения, которые нужны всем, например, службу электронной почты, то в наши дни из-за массовости проникновения технологии спрос найдет и какая-нибудь экзотика вроде доставки вегетарианской пищи.

Такой разброс «предметных областей» мог бы потребовать тысяч уникальных программных продуктов, множество технологий и разновидностей специалистов. Но так не случилось.

Большая часть возможностей, которые предлагает нам Интернет, обеспечена приложениями на основе микросервисной архитектуры. Микросервис – это независимое приложение, которое умеет выполнять несколько взаимосвязанных функций по запросам от других микросервисов, либо от пользовательского интерфейса.

Так же, как наши жилища построены из однотипных кирпичей, блоков или плит, так и Интернет-сервисы, которые мы используем, состоят из множества микросервисов.

Так может выглядеть микросервисная архитектура интернет-магазина

Микросервисы независимы, легко переиспользуются или заменяются. А главное — они сравнительно просты и, зачастую, однотипно устроены. Достаточно написать один-два, и программист может создавать их быстро и очень много, большую часть позаимствовав из других проектов. Например, хорошо написанный сервис User Manager можно затем переиспользовать в любых проектах, где есть авторизация пользователей. Хорошо написанные сервисы продуктовых каталогов и заказов можно использовать в любом новом проекте, связанном с продажами через Интернет.

Читайте также:  My Website

Это руководство поможет Вам освоить современную серверную Java-разработку на примере написания стандартного микросервиса.

Предлагаю ознакомиться с планом работ, выполнив которые, мы создадим готовый к развертыванию в промышленной платформе микросервис с правильной архитектурой.

Первая часть «Инструменты разработчика» расскажет о типовом наборе средств, которые ежедневно используются в нашей работе:

  • Java Development Kit – комплект Java-разработчика
  • IntelliJ IDEA – среда разработки
  • Gradle – система автоматической сборки
  • Git – система управления версиями

Вторая часть «Архитектура приложения» посвящена тому, как устроен типовой Java-сервис:

  • Spring Boot – платформа (framework) для написания приложений на Java
  • DTO – объекты для передачи данных
  • REST-контроллеры – обработчики запросов
  • Валидация – проверка корректности данных
  • Модели – представления о сущностях
  • Liquibase – создание и подключение к базе данных
  • DAO-слой – взаимодействие с базой данных
  • Сервисный слой – бизнес-логика
  • Обработка исключений – что делать, если что-то пошло нет так
  • Scheduler – запуск обработки без запроса
  • Kafka – обмен сообщениями с другими приложениями
  • Application.yml – конфигурация приложения
  • Транзакции – позаботимся о целостности данных

Третья часть «Тестирование» поможет написать тесты для вашего приложения:

  • JUnit – тестирование классов проекта, профили приложения
  • MockMvc – тестирование REST-контроллеров
  • Run Tests With Coverage – проверяем покрытие тестами
  • Rest Assured – тестирование web-сервисов
  • Selenium-java – frontend-тестирование

Четвертая часть «Контейнеризация приложений» познакомит вас с тем, каким образом запускаются и работают приложения в промышленных средах:

  • Дистрибутивы – отдаем приложение в эксплуатацию
  • Docker – средство контейнеризации приложений
  • Kubernetes – средство оркестровки приложений

В четвертой части «Разное» будет рассказано о важных мелочах, которые помогут влиться в команду профессионалов:

  • Форматирование кода – каким должен быть Java-код
  • Code Review – обсуждение доработок
  • Merge Conflict – что делать, если возник конфликт веток
  • Markdown – разметка форматирования текста
  • OpenAPI – framework для описания REST-сервисов
  • JSON Web Token – токены доступа
  • SSL/HTTPS – включаем шифрования трафика
  • Maven – еще один стандартный сборщик проектов
  • Jira – средство планирования разработки
  • Stand-up – общение с командой
  • Собеседование – как получить работу своей мечты

«Список литературы» — книги, которые надо прочитать

Часть 1. Инструменты разработчика

В этой части мы установим на компьютер средства, необходимые разработчику: JDK, IDEA и Git. Затем создадим новый проект и репозиторий для него. А также научимся вносить в проект изменения так, как это принято при командной разработке.

Java Development Kit

Java Development Kit – это первый, обязательный и минимально-необходимый инструмент Java-разработчика. Без него невозможна компиляция Java-программ.

Важно – не путайте Java Runtime Environment (JRE) и Java Development Kit (JDK). Первое позволяет только запускать уже скомпилированные Java-программы.

Прежде чем скачивать и устанавливать JDK на компьютер, получите информацию о версии JDK, которая используется на проекте. Если такой информации нет, установите последнюю LTS версию – 17 (к середине 2022 года).

На момент, когда пишутся эти строки, уже существует 18 версия, а когда вы будете их читать, наверняка будут 19, 20 и 21 версии. Но надо учитывать, что не каждая версия имеет статус Long Term Support (LTS), предполагающий поступление обновлений для нее.

История появления последних версий JDK

Источник

Серверная часть приложения java

Архитектура современных приложений состоит из отдельных модулей, как показано на рисунке выше. Эти модули часто называют Frontend и Backend. Frontend – это модуль, который отвечает за юзер-интерфейс и логику, которые предоставляется приложением при использовании. Так, например когда мы заходим в соцсети через браузер, мы взаимодействуем именно с FrontEnd-модулем приложения. То, как отображаются наши посты в виде сторисов или карточек, сообщения и другие активности реализуются именно в FrontEnd-модуле. А все данные, которые мы видим, хранятся и обрабатываются в Backend или серверной части приложения. Эти модули обмениваются между собой посредством разных архитектурных стилей: REST, GRPC и форматов сообщений – JSON и XML.

В этой статье мы напишем примитивную серверную часть социальной сети с использованием Spring Boot, запустим свой сервер, рассмотрим разные типы HTTP запросов и их применение.

Необходимое требование к читателю: умение писать на Java и базовые знания Spring Framework. Данная статья познакомит вас со Spring Boot и даст базовые понятия данного фреймворка.

Инициализация проекта

Чтобы создать Spring Boot проект, перейдем на страницу https://start.spring.io/ и выберем необходимые зависимости: в нашем случае Spring Web. Чтобы запустить проект, необходима минимальная версия Java 17. Скачиваем проект и открываем в любом IDE (в моем случае – Intellij Idea)

Инициализация проекта

Spring Web – зависимость, которая предоставляет контейнер сервлетов Apache Tomcat (является дефолтным веб-сервером). Проще говоря, сервлеты – это классы, которые обрабатывают все входящие запросы.

Открываем проект и запускаем.

Запуск проекта

Мы видим, что проект запустился и готов обрабатывать запросы на порту 8080 – Tomcat started on port(s): 8080 (http) .

Теперь создадим свой первый класс – GreetingController . Controller-классы ответственны за обработку входящих запросов и возвращают ответ.
Чтобы сделать наш класс Controller , достаточно прописать аннотацию @RestController . @RequestMapping указывает, по какому пути будет находиться определённый ресурс или выполняться логика.

Ответ сервера

Если отправить запрос по адресу http://localhost:8080/ , мы получим ошибку, т. к. по этому пути не определены логика обработки запроса и ресурсы.

🧩☕ Интересные задачи по Java для практики можно найти на нашем телеграм-канале «Библиотека задач по Java»

Request Params

При отправке запросов мы часто используем переменные в запросе, чтобы передавать дополнительную информацию или же делать запросы гибкими. Параметр в запросе передаётся в конце адреса ( =url ) сервера и указывается после вопросительного знака ( =? ).
Например, http://localhost:8080/greet?name=Alice . Параметр запроса является = name cо значением = Alice .

Чтобы обрабатывать переменную запроса, используется аннотация @RequestParam . Параметры запроса могут быть опциональными или же обязательными. @RequestParam(«name») означает следующее: взять ту переменную из запроса, название которого равно name .

☕ Пишем свой первый сервер на Java и Spring Boot

Вдобавок, запрос может содержать несколько параметров.

Например, http://localhost:8080/greet/full?name=John&surname=Smith . Параметры выделяются знаком & . В этом запросе два параметра: name=John и surname=Smith .

Чтобы обработать каждый параметр запроса, нужно пометить каждую переменную @RequestParam .

Параметризованный запрос с двумя параметрами

Path Variable

PathVariable по применению похож на @Request Param . @PathVariable также является параметром запроса, но используются внутри адреса запроса. Например,

RequestParam – http://localhost:8080/greet/full?name=John&surname=Smith
PathVariable – http://localhost:8080/greet/John . В этом случае John является PathVariable.
В запросе можно указывать несколько PathVariable, как и в случае RequestParam

☕ Пишем свой первый сервер на Java и Spring Boot

Запрос с двумя параметризованными PathVariable.

☕ Пишем свой первый сервер на Java и Spring Boot

HTTP-методы

Когда мы говорим о запросах, мы также подразумеваем HTTP-метод, который используется при отправке этого запроса. Каждый запрос представляет собой некий HTTP-метод. Например, когда мы переходим в браузере по адресу http://localhost:8080/greet/John/Smith , наш браузер отправляет GET-запрос на сервер.

Большая часть информационных систем обмениваются данными посредством HTTP-методов. Основными HTTP-методами являются – POST , GET , PUT , DELETE . Эти четыре запроса также называют CRUD-запросами.

  • POST-метод – используется при создании новых ресурсов или данных. Например, когда мы загружаем новые посты в соцсетях, чаще всего используется POST-запросы. POST-запрос может иметь тело запроса.
  • GET-метод – используется при получении данных. Например, при открытии любого веб-приложения, отправляется именно GET-запрос для получения данных и отображения их на странице. GET-запрос не имеет тела запроса.
  • PUT-метод – используется для обновления данных, а также может иметь тело запроса, как и POST.
  • DELETE-метод – используется для удаления данных.

Реализация основных методов

Давайте создадим сущности и реализуем методы, чтобы наш сервер принимал все четыре запроса. Для этого создадим сущности User и Post , и будем проводить операции над ними.

Для простоты User имеет только два поля: username и список постов posts , а сущность Post имеет поле description и imageUrl .

☕ Пишем свой первый сервер на Java и Spring Boot

GET-запрос: получение пользователей

☕ Пишем свой первый сервер на Java и Spring Boot

PUT-запрос: обновление списка постов пользователя

☕ Пишем свой первый сервер на Java и Spring Boot

DELETE-запрос: удаление пользователя по username

☕ Пишем свой первый сервер на Java и Spring Boot

В этой статье мы рассмотрели архитектуру современных web-приложений, а также написали свою серверную часть приложения, получив поверхностные знания по Spring Boot , HTTP запросы и параметры запросов.

Материалы по теме

Источник

Оцените статью