Validation des données en Kotlin : bibliothèques Kotlinx.serialization et Valiktor
La validation des données est une partie essentielle du développement en Kotlin, en particulier lors de la création d'API REST, du travail avec des formulaires ou du traitement de requêtes JSON entrantes. Contrairement à Python, où Pydantic ou Marshmallow sont populaires, dans l'écosystème Kotlin, ce sont Kotlinx.serialization (pour la sérialisation) et Valiktor (pour la validation déclarative) qui dominent. Ces bibliothèques permettent de vérifier l'exactitude des données à la fois au moment de la compilation et pendant l'exécution, minimisant ainsi les erreurs.
Pourquoi la validation est-elle nécessaire ?
Sans validation, une application peut accepter des données incorrectes : chaînes vides, valeurs négatives, email sans « @ ». Cela conduit à des bases de données remplies de données inutiles, des erreurs 500 et des vulnérabilités. En Kotlin, le typage aide, mais ne protège pas contre les règles métier (par exemple, « âge de 18 à 120 »). Les bibliothèques de validation permettent de décrire les règles de manière déclarative et de les réutiliser.
Comment installer ?
Pour Kotlinx.serialization, ajoutez dans build.gradle.kts :
plugins { kotlin("plugin.serialization") version "1.9.22"}dependencies { implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.2")}Pour Valiktor (validation pure) :
dependencies { implementation("org.valiktor:valiktor-core:0.12.0")}Fonctionnalités principales
- Kotlinx.serialization : annotations
@Serializable,@Required,@Rangepour une vérification de base des champs lors de la désérialisation JSON. - Valiktor : fonctions
validate,constraint, validateurs personnalisés, prise en charge des objets imbriqués et des collections. - Les deux bibliothèques fonctionnent avec les data class Kotlin et ne nécessitent pas de réflexion.
Exemple de code en Kotlin
Exemple simple avec Kotlinx.serialization + Valiktor :
import kotlinx.serialization.*import org.valiktor.functions.*import org.valiktor.validate
@Serializabledata class User( @Required val name: String, @Range(from = 18, to = 120) val age: Int, val email: String)
fun main() { val user = User("Alice", 25, "alice@example.com") // Validation via Valiktor validate(user) { validate(User::name).isNotEmpty() validate(User::age).isGreaterThanOrEqualTo(18) validate(User::email).matches(Regex("^[\\\\w.-]+@[\\\\w.-]+\\\\.\\\\w{2,}$")) } println("User $user a passé la validation")}Si les données sont incorrectes, Valiktor lève une exception avec une description de l'erreur.
Quand utiliser ?
- Données d'entrée API : vérification du corps de la requête dans Ktor ou Spring Boot.
- Formulaires : dans les applications Android ou web.
- Configurations : validation des fichiers properties au démarrage de l'application.
Utilisez Kotlinx.serialization pour la sérialisation/désérialisation de base, et Valiktor pour les règles métier complexes (par exemple, vérifier que la date de début est antérieure à la date de fin).