EMZETT.
Войти

Введение в Spring Boot: создание REST API на Java

Коротко: Spring Boot создаёт запускаемые веб-приложения Java с минимальной конфигурацией: контроллеры отвечают на HTTP-запросы, внедрение зависимостей связывает блоки, Spring Data общается с базой данных.

Подробнее: Spring — самый распространённый фреймворк Java для серверных приложений. Spring Boot предоставляет разумные значения по умолчанию и встроенный сервер (Tomcat): java -jar app.jar запускает приложение.

Подробности

Создание проекта

На start.spring.io (Spring Initializr) выберите Maven/Gradle, Java 21, зависимости Spring Web, Spring Data JPA, Validation, H2/PostgreSQL и скачайте. Главный класс:

@SpringBootApplication
public class CatalogApp {
    public static void main(String[] args) {
        SpringApplication.run(CatalogApp.class, args);
    }
}

Конфигурация в application.properties/application.yml (порт, URL базы данных, профили dev/prod). Секреты — через переменные окружения, а не в репозитории.

Контроллер, сервис, репозиторий

@Entity class Game { @Id @GeneratedValue Long id; @NotBlank String title; double price; /* геттеры/сеттеры или record */ }
interface GameRepository extends JpaRepository<Game, Long> {
    List<Game> findByTitleContainingIgnoreCase(String part);
}
@RestController @RequestMapping("/api/games")
class GameController {
    private final GameRepository repo;
    GameController(GameRepository repo) { this.repo = repo; }   // внедрение зависимостей
    @GetMapping List<Game> all() { return repo.findAll(); }
    @GetMapping("/{id}") Game one(@PathVariable Long id) {
        return repo.findById(id).orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND));
    }
    @PostMapping @ResponseStatus(HttpStatus.CREATED)
    Game create(@Valid @RequestBody Game g) { return repo.save(g); }
}

Слои: контроллер (HTTP) → сервис (бизнес-логика) → репозиторий (данные). Наружу отдавайте DTO/record, а не сущности. Валидация через @Valid; централизованная обработка ошибок через @RestControllerAdvice.

Важные понятия

  • Внедрение зависимостей/IoC: Spring создаёт и связывает бины (@Component, @Service, @Repository); предпочитайте внедрение через конструктор.
  • Spring Data JPA/Hibernate: интерфейсы репозиториев генерируют запросы по именам методов; следите за проблемой N+1, ленивой загрузкой; миграции через Flyway/Liquibase вместо ddl-auto=update в продакшне.
  • Spring Security: вход, JWT/OAuth2, CSRF; по умолчанию сначала блокирует всё.
  • Actuator: состояние, метрики (/actuator/health).
  • Профили (dev/test/prod), тестирование (@SpringBootTest, MockMvc, Testcontainers).
  • Журналирование (SLF4J/Logback), OpenAPI (springdoc).

Практика и классификация

  • Запуск ./mvnw spring-boot:run; сборка ./mvnw package → исполняемый JAR → образ Docker.
  • Безопасность: защищайте конечные точки actuator, меняйте пароли по умолчанию, поддерживайте зависимости актуальными (Spring4Shell как пример уязвимостей), проверяйте ввод, SQL только параметризованный.
  • Альтернативы: Quarkus, Micronaut, Jakarta EE; вне Java: FastAPI, Express, ASP.NET.
  • Путь обучения: основы Java → Maven/Gradle → основы REST → Spring Boot → база данных (JPA) → тесты → безопасность → Docker.
  • Экзамен/проект: обоснуйте слоистую архитектуру и принципы REST, документируйте тесты.

См. также: Maven и Gradle, JUnit 5 и Mockito, Проектирование REST API