Вступ до 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