REST API’lerde girdi doğrulama, güvenli ve sağlam web servisleri oluşturmak için çok önemlidir. Bu makalede, Spring Boot kullanarak Java ve Kotlin’de, Gin framework’ü ile Go’da doğrulamanın nasıl yapılacağını adım adım inceleyeceğiz.
Yazan
Şuayb Şimşek
Spring Boot, güvenlik, mikroservis ve cloud-native mimari konularında pratik teknik notlar paylaşan backend odaklı fullstack geliştirici.
Yeni yazılar yayınlandığında pratik backend ve fullstack notlarını al.
Sosyal
🌟 Girdi Doğrulama Neden Önemlidir?
Doğrulama, API’nıza gönderilen verilerin beklenen formatlara uygun olmasını sağlayarak SQL Enjeksiyonu, XSS ve hatalı veri girişi gibi potansiyel güvenlik açıklarını engeller.
📋 Gereksinimler
Doğrulama katmanını uygulamadan önce şunların hazır olduğundan emin olun:
Spring Boot örnekleri için Java 17+
Gin örnekleri için Go 1.21+
Çalışan bir Spring Boot veya Gin başlangıç projesi
DTO, JSON payload ve HTTP durum kodları hakkında temel bilgi
🧪 Adım 1: Doğrulama Bağımlılıklarını Ekleyin
Bu bölümde Adım 1: Doğrulama Bağımlılıklarını Ekleyin konusunu netleştirip uygulamada kullanacağınız temel noktaları özetliyoruz.
Spring Boot Projeleri için:
Önce validation starter bağımlılığını ekleyerek anotasyon tabanlı doğrulama altyapısını aktif hale getirin.
Artık REST API’lerde Girdi Doğrulama için üretim odaklı bir Spring Boot temeliniz var. Sonraki adımda ayarları kendi domainine uyarlayıp test ve gözlemlenebilirlik katmanını ekleyerek gerçek trafik altında doğrulayın.
JAVATodoRequest.java
package com.example.demo.dto;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
import lombok.Data;
@Data
public class TodoRequest {
@NotNull(message = "Başlık zorunludur")
@Size(min = 3, max = 50, message = "Başlık 3 ile 50 karakter arasında olmalıdır")
private String title;
private boolean completed;
}
KOTLINTodoRequest.kt
package com.example.demo.dto
import jakarta.validation.constraints.NotNull
import jakarta.validation.constraints.Size
data class TodoRequest(
@field:NotNull(message = "Başlık zorunludur")
@field:Size(min = 3, max = 50, message = "Başlık 3 ile 50 karakter arasında olmalıdır")
val title: String?,
val completed: Boolean = false
)
GOapp.go
package dto
import (
"github.com/go-playground/validator/v10"
)
type TodoRequest struct {
Title string `validate:"required,min=3,max=50"`
Completed bool `validate:""`
}
var validate = validator.New()
func ValidateTodoRequest(todo TodoRequest) error {
return validate.Struct(todo)
}
JAVATodoController.java
package com.example.demo.controller;
import com.example.demo.dto.TodoRequest;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/api/todos")
public class TodoController {
@PostMapping
public String createTodo(@Validated @RequestBody TodoRequest request) {
return "Oluşturulan görev: " + request.getTitle();
}
}