Введение в 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