Создание приложения REST на Spring Boot с использованием Gradle

В этом уроке мы создадим простой веб-сервис RESTful с использованием Spring Boot и Gradle. Spring Boot упрощает создание автономных, готовых к производству приложений на основе Spring, а Gradle — это мощный инструмент сборки, который упрощает процесс сборки.

Что такое REST?

REST, или Representational State Transfer, — это набор архитектурных принципов, обеспечивающих взаимозаменяемость, масштабируемость и поддерживаемость ваших API. Представьте, что вы строите конструктор — различные приложения могут бесшовно взаимодействовать с вашим API, если они следуют рекомендациям RESTful, так же, как детали конструктора соединяются независимо от набора.

Что такое Spring Boot?

Spring Boot — это мощный фреймворк, который упрощает процесс разработки. Представьте его как набор инструментов с уже готовыми компонентами и функциями, экономящими ваше время и усилия на настройку инфраструктуры вашего приложения. Вы можете сосредоточиться на создании основной логики вашего API, не увязая в шаблонном коде.

Готовы раскрыть свой внутренний потенциал разработчика API? Этот гид вооружит вас знаниями для создания вашего первого приложения REST на Spring Boot с использованием Gradle, популярного инструмента сборки. Будь вы опытный программист на Java или только начинаете свое исследование, этот пошаговый путь предоставит вам необходимые знания для создания динамических и интерактивных веб-сервисов.

Основные выводы

  • Создание RESTful API с использованием Spring Boot: Spring Boot — популярный фреймворк на Java, который упрощает процесс разработки RESTful API. Он предлагает широкий спектр функций из коробки, таких как автоматическая конфигурация и инъекция зависимостей, что может сэкономить ваше время и усилия.
  • Понимание основных концепций RESTful API: REST означает Representational State Transfer. Это набор архитектурных принципов, которые обеспечивают взаимодействие, масштабируемость и поддерживаемость ваших API. Ключевые концепции RESTful API включают представление ресурсов, HTTP-методы и коды состояния.
  • Реализация базовых операций CRUD: CRUD означает Create, Read, Update, Delete. Это основные операции, которые вам нужно будет реализовать в конечных точках вашего API для взаимодействия пользователей с вашими данными.
  • Тщательно протестируйте ваш API: Важно тщательно протестировать ваш API перед развертыванием в производстве. Это поможет вам убедиться, что он работает как ожидается и нет ошибок.
  • Исследуйте расширенные функциональности: По мере того как вы становитесь более знакомы с Spring Boot и RESTful API, вы можете исследовать более расширенные функциональности, такие как управление данными, безопасность и аутентификация.

Объединив мощь REST с упрощенным подходом Spring Boot, вы сможете создать эффективные и удобные для пользователя API, которые могут интегрироваться без проблем с другими приложениями. Так вы готовы раскрыть потенциал RESTful API с помощью Spring Boot и Gradle? Давайте начнем!

Необходимые условия

  • Установлен Java Development Kit (JDK) 11
  • Установлена последняя версия Gradle
  • Базовое понимание концепций Java и Spring

Шаг 1: Настройка проекта

Для начала работы с проектом необходимо выполнить следующие 3 шага.

  • Откройте терминал или командную строку
  • Создайте новую директорию для вашего проекта
  • Перейдите в директорию проекта
  • Инициализируйте базовую структуру проекта Spring Boot

Shell

 

mkdir spring-boot-rest-gradle
cd spring-boot-rest-gradle
gradle init --type spring-boot

Шаг 2: Создание проекта Spring Boot

Пожалуйста, отредактируйте существующий файл build.gradle, находящийся в директории, с помощью следующего содержимого.

Groovy

 

plugins {
    id 'org.springframework.boot' version '2.6.3'
    id 'io.spring.dependency-management' version '1.0.11.RELEASE'
    id 'java'
}

group = 'com.example'
version = '1.0-SNAPSHOT'
sourceCompatibility = '11'

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

test {
    useJUnitPlatform()
}

Это настраивает базовый проект Spring Boot с необходимыми зависимостями.

Шаг 3: Создание REST контроллера

Создайте новый файл с именем HelloController.java в директории src/main/java/com/example с таким содержимым:

Java

 

import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.List;

@RestController
@RequestMapping("/api")
public class HelloController {

    private final List<String> messages = new ArrayList<>();

    @GetMapping("/hello")
    public String sayHello() {
        return "Hello, Spring Boot!";
    }

    @GetMapping("/messages")
    public List<String> getMessages() {
        return messages;
    }

    @PostMapping("/messages")
    public String addMessage(@RequestBody String message) {
        messages.add(message);
        return "Message added: " + message;
    }

    @PutMapping("/messages/{index}")
    public String updateMessage(@PathVariable int index, @RequestBody String updatedMessage) {
        if (index < messages.size()) {
            messages.set(index, updatedMessage);
            return "Message updated at index " + index + ": " + updatedMessage;
        } else {
            return "Invalid index";
        }
    }

    @DeleteMapping("/messages/{index}")
    public String deleteMessage(@PathVariable int index) {
        if (index < messages.size()) {
            String removedMessage = messages.remove(index);
            return "Message removed at index " + index + ": " + removedMessage;
        } else {
            return "Invalid index";
        }
    }
}

Это определяет REST контроллер с конечными точками для операций GET, POST, PUT и DELETE над простой списком сообщений.

Шаг 4: Запуск приложения

Откройте терминал или командную строку и запустите следующую команду:

Java

 

./gradlew bootRun

Посетите http://localhost:8080/api/hello в вашем браузере, чтобы проверить начальную конечную точку. Вы можете использовать инструменты, такие как curl, Postman или любой REST-клиент для тестирования других конечных точек.

Шаг 5: Написание тестовых случаев

Создайте новый файл с названием HelloControllerTest.java в директории src/test/java/com/example с содержимым:

Java

 

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.BeforeEach;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.MediaType;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;

import static org.hamcrest.Matchers.hasSize;
import static org.hamcrest.Matchers.is;

@SpringBootTest
@AutoConfigureMockMvc
public class HelloControllerTest {

    @Autowired
    private MockMvc mockMvc;

    @BeforeEach
    public void setUp() {
        // Очистка сообщений перед каждым тестом
        // Это обеспечивает чистое состояние для каждого теста
        // В качестве альтернативы можно использовать тестовую базу данных или мокированные данные
        // в зависимости от ваших требований
        HelloController messagesController = new HelloController();
        messagesController.getMessages().clear();
    }

    @Test
    public void testSayHello() throws Exception {
        mockMvc.perform(MockMvcRequestBuilders.get("/api/hello"))
                .andExpect(MockMvcResultMatchers.status().isOk())
                .andExpect(MockMvcResultMatchers.content().string("Hello, Spring Boot!"));
    }

    @Test
    public void testGetMessages() throws Exception {
        mockMvc.perform(MockMvcRequestBuilders.get("/api/messages"))
                .andExpect(MockMvcResultMatchers.status().isOk())
                .andExpect(MockMvcResultMatchers.jsonPath("$", hasSize(0)));
    }

    @Test
    public void testAddMessage() throws Exception {
        mockMvc.perform(MockMvcRequestBuilders.post("/api/messages")
                .contentType(MediaType.APPLICATION_JSON)
                .content("\"Test Message\""))
                .andExpect(MockMvcResultMatchers.status().isOk())
                .andExpect(MockMvcResultMatchers.content().string("Message added: Test Message"));
    }

    @Test
    public void testUpdateMessage() throws Exception {
        mockMvc.perform(MockMvcRequestBuilders.post("/api/messages")
                .contentType(MediaType.APPLICATION_JSON)
                .content("\"Initial Message\""));

        mockMvc.perform(MockMvcRequestBuilders.put("/api/messages/0")
                .contentType(MediaType.APPLICATION_JSON)
                .content("\"Updated Message\""))
                .andExpect(MockMvcResultMatchers.status().isOk())
                .andExpect(MockMvcResultMatchers.content().string("Message updated at index 0: Updated Message"));
    }

    @Test
    public void testDeleteMessage() throws Exception {
        mockMvc.perform(MockMvcRequestBuilders.post("/api/messages")
                .contentType(MediaType.APPLICATION_JSON)
                .content("\"Message to Delete\""));

        mockMvc.perform(MockMvcRequestBuilders.delete("/api/messages/0"))
                .andExpect(MockMvcResultMatchers.status().isOk())
                .andExpect(MockMvcResultMatchers.content().string("Message removed at index 0: Message to Delete"));
    }
}

Эти тестовые случаи используют возможности тестирования Spring Boot для имитации HTTP-запросов и проверки поведения REST-контроллера.

Шаг 6: Запуск тестов

Откройте терминал или командное окно и выполните следующую команду для выполнения тестов:

Java

 

./gradlew test 

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

Заключение

Поздравляем! Вы успешно создали базовый RESTful веб-сервис с операциями CRUD с использованием Spring Boot и Gradle. В этом уроке было рассмотрено реализация конечных точек для операций GET, POST, PUT и DELETE вместе с соответствующими тестовыми случаями.

Дополнительные замечания:

  • Это очень базовый пример. Вы можете расширить его, создав больше конечных точек, обрабатывая различные HTTP-методы (POST, PUT, DELETE) и добавив функциональность, такую как управление данными.
  • Рассмотрите возможность добавления юнит-тестов для вашего контроллера с использованием фреймворков, таких как JUnit.
  • Вы можете использовать Spring Initializr (https://start.spring.io/) для быстрого создания проекта с дополнительными зависимостями и конфигурациями.

Для дальнейшего обучения проверьте эти ресурсы:

Помните, это только начало вашего пути с Spring Boot! Продолжайте изучать и создавать удивительные приложения.

Source:
https://dzone.com/articles/build-your-first-spring-boot-rest-application-with