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=updateyerine 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ı