Kotlin में डेटा वैलिडेशन: Kotlinx.serialization और Valiktor लाइब्रेरीज़
डेटा वैलिडेशन Kotlin में डेवलपमेंट का एक महत्वपूर्ण हिस्सा है, खासकर REST API बनाते समय, फॉर्म के साथ काम करते समय या इनकमिंग JSON अनुरोधों को प्रोसेस करते समय। Python के विपरीत, जहाँ Pydantic या Marshmallow लोकप्रिय हैं, Kotlin इकोसिस्टम में Kotlinx.serialization (सीरियलाइज़ेशन के लिए) और Valiktor (डिक्लेरेटिव वैलिडेशन के लिए) अग्रणी हैं। ये लाइब्रेरीज़ कंपाइल टाइम और रन टाइम के दौरान डेटा की सटीकता की जाँच करने की अनुमति देती हैं, जिससे त्रुटियाँ कम होती हैं।
वैलिडेशन की आवश्यकता क्यों है?
वैलिडेशन के बिना, एप्लिकेशन गलत डेटा स्वीकार कर सकता है: खाली स्ट्रिंग्स, नकारात्मक मान, बिना '@' वाला ईमेल। इससे डेटाबेस में कचरा, 500 त्रुटियाँ और सुरक्षा कमज़ोरियाँ होती हैं। Kotlin में टाइपिफिकेशन मदद करता है, लेकिन बिज़नेस नियमों (जैसे, "उम्र 18 से 120 के बीच") से नहीं बचाता। वैलिडेशन लाइब्रेरीज़ नियमों को डिक्लेरेटिव रूप से वर्णित करने और उन्हें पुन: उपयोग करने की अनुमति देती हैं।
कैसे इंस्टॉल करें?
Kotlinx.serialization के लिए, build.gradle.kts में जोड़ें:
plugins { kotlin("plugin.serialization") version "1.9.22"}dependencies { implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.2")}Valiktor (शुद्ध वैलिडेशन) के लिए:
dependencies { implementation("org.valiktor:valiktor-core:0.12.0")}मुख्य कार्यक्षमताएँ
- Kotlinx.serialization: JSON डिसीरियलाइज़ेशन के दौरान बुनियादी फ़ील्ड जाँच के लिए
@Serializable,@Required,@Rangeएनोटेशन। - Valiktor:
validate,constraintफ़ंक्शन, कस्टम वैलिडेटर, नेस्टेड ऑब्जेक्ट और कलेक्शन के लिए सपोर्ट। - दोनों लाइब्रेरीज़ Kotlin data class के साथ काम करती हैं और रिफ्लेक्शन की आवश्यकता नहीं होती।
Kotlin में कोड का उदाहरण
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") // Valiktor के माध्यम से वैलिडेशन validate(user) { validate(User::name).isNotEmpty() validate(User::age).isGreaterThanOrEqualTo(18) validate(User::email).matches(Regex("^[\\\\w.-]+@[\\\\w.-]+\\\\.\\\\w{2,}$")) } println("User $user ने वैलिडेशन पास कर लिया")}यदि डेटा गलत है, तो Valiktor त्रुटि विवरण के साथ एक अपवाद फेंकता है।
कब उपयोग करें?
- API इनपुट डेटा: Ktor या Spring Boot में अनुरोध बॉडी की जाँच।
- फॉर्म: Android या वेब एप्लिकेशन में।
- कॉन्फ़िगरेशन: एप्लिकेशन स्टार्टअप पर properties-फ़ाइलों का वैलिडेशन।
बुनियादी सीरियलाइज़ेशन/डिसीरियलाइज़ेशन के लिए Kotlinx.serialization का उपयोग करें, और जटिल बिज़नेस नियमों (जैसे, यह जाँचना कि आरंभ तिथि समाप्ति तिथि से छोटी है) के लिए Valiktor का उपयोग करें।