Spring Boot CRUD: DELETE İşlemi Nasıl Yapılır? (REST API)
Spring Boot uygulamasında veritabanından bir kayıt silmek (DELETE) için Spring Data JPA'nın yerleşik deleteById(id) metodu kullanılır. REST API tasarlarken, Controller katmanında @DeleteMapping("/{id}") anotasyonu ile silinecek verinin ID'si yakalanır ve Service katmanı aracılığıyla veritabanından kalıcı olarak silinir. İşlem başarılıysa istemciye 204 No Content veya 200 OK HTTP durum kodu dönülür.
Bu yazıda, modern bir Spring Boot REST API mimarisinde DELETE operasyonunu adım adım inceleyeceğiz. Entity modelinden başlayıp Repository, Service ve Controller katmanlarını nasıl tasarlayacağınızı ve Postman ile nasıl test edeceğinizi öğreneceksiniz.
1. CRUD Delete Operasyonu Nedir?
CRUD, veritabanı yönetimindeki dört temel işlemi temsil eder: Create (Ekleme), Read (Okuma), Update (Güncelleme) ve Delete (Silme).
DELETE operasyonu, ilişkisel veritabanlarında (PostgreSQL, MySQL vb.) DELETE FROM table WHERE id=? SQL sorgusunun karşılığıdır. Spring Boot'ta bu işlemi manuel SQL yazmadan JPA sayesinde tek satır kodla yapabiliriz.
Serinin önceki yazılarını incelemek isterseniz:
2. Entity Sınıfının Oluşturulması
İlk olarak veritabanındaki "users" tablosunu temsil eden User entity sınıfını oluşturuyoruz. Kodu temiz tutmak için Lombok kütüphanesini kullanıyoruz.
@Entity
@Table(name = "users")
@Getter
@Setter
@NoArgsConstructor
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false)
private String username;
@Column(nullable = false)
private String password;
@Column(unique = true, nullable = false)
private String email;
}
3. Repository Katmanının Oluşturulması
Veritabanı işlemleri için bir UserRepository interface'i oluşturuyoruz. JpaRepository sınıfını miras aldığımız için silme metotlarını bizim yazmamıza gerek kalmıyor.
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
// deleteById(Long id) metodu JpaRepository içinde zaten mevcuttur!
// Ekstra bir metot tanımlamamıza gerek yoktur.
}
4. Service Katmanında Delete Metodu
İş kurallarının (Business Logic) yazıldığı Servis katmanında kullanıcıyı ID üzerinden silen metodumuzu oluşturuyoruz.
@Service
@RequiredArgsConstructor
public class UserService {
private final UserRepository userRepository;
@Transactional
public void deleteUser(Long id) {
// Silinmek istenen veri veritabanında var mı kontrolü
if (!userRepository.existsById(id)) {
throw new RuntimeException("Kullanıcı bulunamadı: " + id);
}
userRepository.deleteById(id);
}
}
5. Controller Katmanında DELETE Endpoint
Dış dünyadan (Frontend veya Mobil uygulamadan) gelen HTTP DELETE isteklerini yakalamak için REST Controller sınıfımızı yazıyoruz.
@RestController
@RequestMapping("/api/users")
@RequiredArgsConstructor
public class UserController {
private final UserService userService;
@DeleteMapping("/{id}")
public ResponseEntity<Void> deleteUser(@PathVariable Long id) {
userService.deleteUser(id);
// İşlem başarılı olduğunda 204 No Content dönmek REST standartıdır
return ResponseEntity.noContent().build();
}
}
6. Postman ile Delete İşlemini Test Etme
Yazdığımız API'nin çalışıp çalışmadığını Postman üzerinden test edebiliriz.
İstek Tipi: DELETE
URL: http://localhost:8080/api/users/2
Bu istek, veritabanındaki id = 2 olan kullanıcıyı siler. İşlem başarılıysa sunucu REST standartlarına uygun olarak 204 No Content veya 200 OK yanıtı döndürür.
7. Sonuç
Bu rehberde Spring Boot ve Spring Data JPA kullanarak bir DELETE işleminin nasıl yapılacağını katmanlı mimariye (Entity, Repository, Service, Controller) uygun olarak öğrendik.
Bir sonraki adım olan veri güncelleme işlemlerini öğrenmek için Spring Boot Update İşlemi içeriğimizi inceleyebilirsiniz. İyi çalışmalar!