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