Введение
Добро пожаловать в новый цикл статей от команды Гиперскилл. Он будет посвящен техническим аспектам программирования!
В этой серии мы познакомим вас с созданием серверного приложения с нуля с использованием среды Spring и языка программирования Kotlin. Независимо от того, являетесь ли вы новичком или опытным разработчиком в другой области, это руководство предоставит вам знания и навыки, необходимые для создания серверного приложения.
Spring — популярный фреймворк на основе Java, широко используемый для создания приложений корпоративного уровня. Он предоставляет полный набор функций, упрощающих создание надежных и масштабируемых приложений. Kotlin же — современный, лаконичный и выразительный язык программирования, полностью совместимый с Java. Он предлагает несколько функций, которые делают его идеальным выбором для создания серверных приложений.
В этом руководстве мы рассмотрим все, от настройки среды разработки до создания RESTful API, обработки взаимодействий с базой данных и развертывания приложения на рабочем сервере. К концу этой серии вы будете иметь четкое представление о том, как создавать серверные приложения с помощью Spring и Kotlin. Итак, приступим!
Настройка среды
Прежде чем мы начнем, на вашем компьютере должно быть установлено следующее:
- Ява 8 или выше
- Котлин
- IntelliJ IDEA или другая IDE
- Gradle или Maven для создания и управления зависимостями
Когда у вас есть необходимые инструменты, мы можем начать с создания нового проекта в вашей среде IDE. В этом руководстве мы будем использовать IntelliJ IDEA, но процесс должен быть аналогичным в других IDE. Чтобы создать новый проект, перейдите в раздел Файл > Создать > Проект и выберите «Инициализатор Spring» из вариантов.
После создания проекта вам нужно будет добавить необходимые зависимости для фреймворка Spring. В файле build.gradle вы можете добавить следующие зависимости:
- весна-паутина
- весна-данные-jpa
- h2
Или вы можете использовать меню в Intellij, чтобы найти все эти зависимости, как на скриншоте ниже:
Эти зависимости предоставят вам базовые функции для создания RESTful API и обработки взаимодействий с базой данных. Вы также можете добавить другие зависимости, необходимые для вашего приложения.
После настройки среды разработки мы можем двигаться дальше и создать RESTful API для нашего приложения.
Начало работы с весной
IntelliJ IDEA создала для нас проект Spring Boot. Чтобы запустить его, все, что вам нужно сделать, это открыть основной файл и запустить основную функцию.
Журналы приложения говорят нам, что все настроено правильно, и мы можем двигаться дальше!
Создание RESTful API:
Теперь, когда мы настроили среду разработки, мы можем приступить к созданию нашего RESTful API. В этом разделе мы будем использовать платформу Spring для обработки маршрутизации и обработки запросов и Kotlin для логики API.
Во-первых, мы создадим класс контроллера для обработки маршрутизации для нашего API. В классе контроллера мы будем использовать аннотацию @RestController, чтобы указать, что этот класс будет обрабатывать запросы RESTful API.
@RestController class TasksController { //API logic here }
Далее мы определим конечную точку нашего API с помощью аннотации @RequestMapping. Эта аннотация позволяет нам указать путь, по которому будет доступна конечная точка. Например, мы можем создать конечную точку для получения информации о задаче, используя следующий код:
@GetMapping("/task/{id}") fun getTask(@PathVariable id: Long): Task { //Fetch task with the provided id and return it }
Мы также можем добавить другие методы запроса, такие как @PostMapping для создания нового ресурса и @DeleteMapping для удаления существующего ресурса.
Подключение к базе данных:
В этом разделе мы будем использовать библиотеку Spring Data JPA для обработки взаимодействий с базой данных. Эта библиотека позволяет нам легко создавать репозитории для взаимодействия с нашей базой данных и предоставляет удобный способ определить нашу схему базы данных с помощью классов Java.
Во-первых, мы создадим класс сущности, который представляет нашу таблицу базы данных. Например, мы можем создать объект Task следующим образом:
@Entity data class Task( @Id @GeneratedValue val id: Long, val name: String, val description: String, val complexity: Complexity ) enum class Complexity { EASY, MEDIUM, HARD }
Затем создайте интерфейс репозитория, который будет обрабатывать операции CRUD для нашей сущности Task. Это можно сделать, расширив интерфейс CrudRepository и указав типы сущности и первичного ключа.
interface TaskRepository : CrudRepository<Task, Long>
Теперь, когда репозиторий настроен, мы можем использовать его в нашем контроллере для извлечения и обновления данных из базы данных.
Использование репозитория в контроллере:
Теперь, когда мы настроили наш репозиторий, мы можем использовать его в нашем контроллере для извлечения и обновления данных из базы данных. Мы можем использовать аннотацию @Autowired для внедрения репозитория в наш контроллер.
@Autowired lateinit var taskRepository: TaskRepository
После внедрения репозитория вы можете использовать его в конечных точках API для получения и обновления данных. Например, в нашей конечной точке getTask мы можем получить задачу по ее идентификатору, используя метод findById, предоставляемый репозиторием.
@GetMapping("/task/{id}") fun getTask(@PathVariable id: Long): Task { return taskRepository.findById(id).orElseThrow { TaskNotFoundException(id) } }
Задачи с данным идентификатором может не быть. Поэтому нам нужно это учесть и создать исключение для этого случая.
class TaskNotFoundException(id: Long) : Exception("Task with id = $id not found")
Не забывайте, что вам нужно обрабатывать исключения в Spring! Для этого существует так называемый ControllerAdvice. ControllerAdvice — это механизм в Spring, который позволяет разработчикам централизовать обработку исключений и применять общее поведение к нескольким контроллерам в приложении. Он позволяет отделить сквозные задачи от бизнес-логики, делая код более модульным и удобным в сопровождении.
Мы подробно рассмотрим использование различных шаблонов Spring в будущем, а пока давайте создадим простой обработчик TaskNotFoundException:
@ControllerAdvice class ControllerAdvice { @ExceptionHandler fun handleTaskNotFoundException(ex: TaskNotFoundException): ResponseEntity<ErrorMessage> { val errorMessage = ErrorMessage( ex.message, HttpStatus.NOT_FOUND.toString(), ) return ResponseEntity(errorMessage, HttpStatus.NOT_FOUND) } }
Поместите соответствующие аннотации (@ControllerAdvice, @ExceptionHandler), чтобы все работало в Spring. Мы также создаем специальный класс для возврата ошибок:
class ErrorMessage( var message: String?, var status: String )
Мы также можем использовать метод save для создания задачи в базе данных.
@PostMapping("/task") fun createTask(@RequestBody task: Task): Task { return taskRepository.save(task) }
Кроме того, мы можем использовать метод deleteById для удаления задачи из базы данных.
@DeleteMapping("/task/{id}") fun deleteTask(@PathVariable id: Long) { taskRepository.deleteById(id) }
Давайте попробуем наш API с HTTP-файлами IDEA:Новое –›HTTP-запрос:
После выполнения запроса мы увидим следующий ответ консоли:
Теперь давайте попробуем GET localhost:8080/task/1. И мы получим тот же вывод, что и выше.
УДАЛИТЬ localhost:8080/task/1:‹Тело ответа пусто›
Снова GET localhost:8080/task/1после удаления:
Так что все идет по плану!
Реализовав эти основные операции CRUD, мы успешно создали простое серверное приложение с использованием Spring и Kotlin.
Имейте в виду, что это всего лишь базовый пример, и вы можете использовать методы репозитория и другие функции, предоставляемые Spring, для создания более сложных приложений.
Подведение итогов
В заключение, создание серверного приложения с помощью Spring и Kotlin — это простой процесс. Благодаря мощным функциям Spring и выразительному и лаконичному синтаксису Kotlin вы можете создавать надежные и удобные в сопровождении приложения. Мы рассмотрели основы настройки проекта Spring, создания моделей и использования репозиториев для взаимодействия с базой данных. Мы надеемся, что эта статья предоставила вам прочную основу для создания серверных приложений.
Если вы хотите узнать больше о создании серверных приложений с помощью Spring и Kotlin, мы рекомендуем посетить hyperskill.org — онлайн-платформу для проектного обучения компьютерным языкам, науке о данных и математике.
В сотрудничестве с нашим основным поставщиком контента, JetBrains, мы предлагаем интерактивные и всеобъемлющие треки по Spring и Kotlin, а также другим языкам программирования и технологиям.
Вот ссылки на некоторые темы, где вы можете продолжить изучение Spring, с хорошей теорией и практическими задачами и вопросами:
Также, если вы хотите изучить Kotlin, выбирайте наши направления Основы Kotlin и Разработчик Kotlin!
Если вы хотите изучать курсы с качественным содержанием, персонализированным учебным планом и увлекательными практическими заданиями — добро пожаловать в Гиперскилл!
Мы надеемся, что вы нашли это полезным. Если у вас есть какие-либо вопросы или отзывы, сообщите нам об этом в комментариях ниже. Если вам понравилась эта статья и вы хотите быть в курсе подобных материалов, вы можете подписаться на нашу рассылку.
Вы также можете следить за нами в социальных сетях, чтобы быть в курсе наших последних статей и проектов. Мы есть на Reddit, LinkedIn и Facebook.
Спасибо за чтение и удачного кодирования!