Validation des données en Kotlin : aperçu des bibliothèques et exemples pratiques
La validation des données est l'un des aspects clés du développement d'applications fiables. Dans l'écosystème Kotlin, il existe plusieurs bibliothèques puissantes qui permettent de décrire de manière déclarative les règles de vérification, évitant ainsi les constructions conditionnelles lourdes. Dans cet article, nous examinerons trois outils populaires : Konad, Valiktor et Kvalidation. Vous découvrirez comment ils fonctionnent et verrez des exemples de code pour des tâches réelles.
1. Konad — validation fonctionnelle
Konad (Kotlin Validation) utilise le concept de monades et de programmation fonctionnelle. Au lieu de lever des exceptions, la bibliothèque retourne Validated<E, A>, où E est le type d'erreur et A la valeur réussie. Cela permet d'accumuler les erreurs et de les traiter sans effets de bord.
Installation
// build.gradle.ktsdependencies { implementation("io.github.mkobit:konad:0.3.0")}Exemple d'utilisation
import konad.*
data class User(val name: String, val age: Int)
fun validateUser(user: User): Validated<String, User> { return Validated.valid(user) .validate { it.name.isNotBlank() } { "Name cannot be blank" } .validate { it.age in 18..99 } { "Age must be between 18 and 99" }}
fun main() { val user = User("Alice", 25) val result = validateUser(user)
when (result) { is Valid -> println("Valid user: ${result.value}") is Invalid -> println("Errors: ${result.errors.joinToString(", ")}") }}Avantages de Konad :
- Style fonctionnel pur sans exceptions
- Accumulation de toutes les erreurs de validation
- Composition de validateurs
2. Valiktor — validation déclarative avec une API fluide
Valiktor propose un DSL intuitif pour décrire les règles. La bibliothèque prend en charge les objets imbriqués, les collections et les messages d'erreur personnalisés. C'est l'un des outils les plus populaires pour Kotlin.
Installation
// build.gradle.ktsdependencies { implementation("org.valiktor:valiktor-core:0.12.0")}Exemple avec objets imbriqués
import org.valiktor.*import org.valiktor.functions.*
data class Address(val city: String, val zip: String)data class Person(val name: String, val email: String, val address: Address)
fun validatePerson(person: Person) { validate(person) { validate(Person::name).isNotBlank().hasSize(min = 2, max = 50) validate(Person::email).isEmail() validate(Person::address) { validate(Address::city).isNotBlank() validate(Address::zip).matches("\\\\d{5}".toRegex()) } }}
fun main() { val person = Person("", "invalid-email", Address("", "123")) try { validatePerson(person) } catch (e: ConstraintViolationException) { e.constraintViolations.forEach { violation -> println("${violation.property}: ${violation.message}") } }}Caractéristiques de Valiktor :
- Prise en charge complète des objets imbriqués et des listes
- Messages d'erreur localisés
- Intégration avec Spring Boot et Ktor
3. Kvalidation — validation modulaire basée sur les annotations
Kvalidation (anciennement Koptional) propose à la fois une approche par annotations et une approche programmatique. La bibliothèque est particulièrement pratique pour valider les données d'entrée dans les API REST.
Installation
// build.gradle.ktsdependencies { implementation("com.willowtreeapps:kvalidation:1.0.0")}Exemple avec annotations
import com.willowtreeapps.kvalidation.annotations.*import com.willowtreeapps.kvalidation.Validator
data class Product( @field:NotBlank(message = "Pro Aussi dans la bibliothèque
Swift Package Manager pour Swift : guide complet avec exemples
Générateur de QR codes en TypeScript : qrcode.js et qrcode-generator
GraphQL Java : Guide complet de la bibliothèque pour créer des API en Java
GraphQL en TypeScript : Bibliothèques pour des API typés sécurisés
Programmation réactive en Go (Golang) : bibliothèques, modèles et exemples