EMZETT.
Giriş yap

Spring Boot’a giriş: Java’da REST API kurmak

Kısaca: Spring Boot, az yapılandırmayla çalıştırılabilir Java web uygulamaları üretir: denetleyiciler HTTP isteklerine yanıt verir, bağımlılık enjeksiyonu yapı taşlarını bağlar, Spring Data veri tabanıyla konuşur.

Biraz daha ayrıntılı: Spring, sunucu uygulamaları için en yaygın Java çerçevesidir. Spring Boot mantıklı varsayılanlar ve gömülü bir sunucu (Tomcat) sağlar: java -jar app.jar uygulamayı başlatır.

Ayrıntılı

Proje oluşturmak

start.spring.io’da (Spring Initializr) Maven/Gradle, Java 21, Spring Web, Spring Data JPA, Validation, H2/PostgreSQL bağımlılıklarını seç ve indir. Ana sınıf:

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

Yapılandırma application.properties/application.yml içinde (port, veri tabanı URL’si, dev/prod profilleri). Sırlar depoda değil, ortam değişkenleriyle.

Denetleyici, servis, depo

@Entity class Game { @Id @GeneratedValue Long id; @NotBlank String title; double price; /* getter/setter veya 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; }   // bağımlılık enjeksiyonu
    @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); }
}

Katmanlar: denetleyici (HTTP) → servis (iş mantığı) → depo (veri). Dışarıya varlıklar yerine DTO’ları/record’ları sun. @Valid ile doğrulama; @RestControllerAdvice ile merkezî hata işleme.

Önemli kavramlar

  • Bağımlılık enjeksiyonu/IoC: Spring bean’leri (@Component, @Service, @Repository) oluşturur ve bağlar; yapıcı enjeksiyonunu tercih et.
  • Spring Data JPA/Hibernate: depo arayüzleri metot adlarından sorgular üretir; N+1 sorununa, tembel yüklemeye dikkat; üretimde ddl-auto=update yerine Flyway/Liquibase ile migrasyonlar.
  • Spring Security: giriş, JWT/OAuth2, CSRF; varsayılan olarak önce her şeyi kilitler.
  • Actuator: sağlık, metrikler (/actuator/health).
  • Profiller (dev/test/prod), test etme (@SpringBootTest, MockMvc, Testcontainers).
  • Günlükleme (SLF4J/Logback), OpenAPI (springdoc).

Uygulama ve sınıflandırma

  • Başlat ./mvnw spring-boot:run; derle ./mvnw package → çalıştırılabilir JAR → Docker imajı.
  • Güvenlik: actuator uç noktalarını koru, varsayılan parolaları değiştir, bağımlılıkları güncel tut (zafiyet örneği olarak Spring4Shell), girdileri doğrula, SQL yalnızca parametreli.
  • Alternatifler: Quarkus, Micronaut, Jakarta EE; Java dışında: FastAPI, Express, ASP.NET.
  • Öğrenme yolu: Java temelleri → Maven/Gradle → REST temelleri → Spring Boot → veri tabanı (JPA) → testler → güvenlik → Docker.
  • Sınav/proje: katmanlı mimariyi ve REST ilkelerini gerekçelendir, testleri belgele.

Ayrıca bak: Maven ve Gradle, JUnit 5 ve Mockito, REST API tasarımı