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 matures qui permettent de décrire de manière déclarative les règles de validation, libérant ainsi le développeur du code standard. Dans cet article, nous examinerons trois outils populaires : Konform, Valiktor et Kotlinx Validation, et discuterons quand et quel outil choisir.
1. Konform — validation fonctionnelle basée sur Arrow
La bibliothèque Konform est construite sur la base du framework fonctionnel Arrow. Elle utilise le concept de Validated pour accumuler les erreurs et prend en charge les structures de données simples et imbriquées.
Installation
// build.gradle.ktsimplementation("io.konform:konform:0.4.0")Exemple d'utilisation
import io.konform.validation.*
data class User( val name: String, val email: String, val age: Int)
val userValidation = Validation<User> { User::name { minLength(2) hint "Le nom doit contenir au moins 2 caractères" maxLength(50) hint "Le nom ne doit pas dépasser 50 caractères" } User::email { pattern(Regex("^[\\\\w.-]+@[\\\\w.-]+\\\\.\\\\w{2,}$")) hint "Email invalide" } User::age { minimum(18) hint "L'âge doit être d'au moins 18 ans" maximum(120) hint "Indiquez un âge réel" }}
fun main() { val user = User("A", "invalid-email", 15) val result = userValidation(user) if (result.errors.isNotEmpty()) { result.errors.forEach { error -> println("Champ : ${error.path} — ${error.message}") } } else { println("Validation réussie") }}Caractéristiques
- Intégration complète avec Arrow pour la composition des validations
- Prise en charge des objets imbriqués et des listes
- Constructions DSL typées
- Accumulation de toutes les erreurs (ne s'arrête pas à la première)
2. Valiktor — validation impérative avec une API fluide
Valiktor propose une approche plus traditionnelle utilisant une interface fluide. La bibliothèque ne nécessite pas de dépendances fonctionnelles et est facile à apprendre pour les développeurs familiers avec Java.
Installation
implementation("org.valiktor:valiktor-core:0.12.0")Exemple d'utilisation
import org.valiktor.functions.*import org.valiktor.validate
data class Order( val id: String, val amount: Double, val items: List<String>)
fun validateOrder(order: Order) { validate(order) { validate(Order::id).isNotBlank().hasSize(10..36) validate(Order::amount).isPositive().isLessThanOrEqualTo(10000.0) validate(Order::items).isNotEmpty().hasSize(1..50) }}
fun main() { val order = Order("", -100.0, emptyList()) try { validateOrder(order) println("Commande valide") } catch (e: Exception) { println("Erreur de validation : ${e.message}") }}Caractéristiques
- API simple et compréhensible sans abstractions fonctionnelles
- Lève une exception à la première erreur (mode fail-fast)
- Prise en charge de validateurs personnalisés via des extensions
- Intégration facile avec les projets Java
3. Kotlinx Validation — bibliothèque officielle de JetBrains
Bien que le projet Kotlinx Validation soit encore en phase expérimentale, il propose déjà une approche intéressante avec des annotations et la réflexion, rappelant Javax Validation (Bean Validation).
Installation
implementation("org.jetbrains.kotlinx:kotlinx-validation:0.1.0")Exemple d'utilisation
i Aussi dans la bibliothèque
Validation des données en Swift : bibliothèque Validator
Travailler avec Apache Kafka en Swift (iOS/macOS) : bibliothèques et exemples
Travailler avec CSV en Kotlin : bibliothèques et exemples de code
Travailler avec les dates en Go (Golang) : bibliothèques time, carbon et now