Kotlinx.serialization و Valiktor: التحقق من صحة البيانات في Kotlin

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

التحقق من صحة البيانات في 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: التعليقات التوضيحية @Serializable، @Required، @Range للتحقق الأساسي من الحقول عند إلغاء تسلسل JSON.
  • Valiktor: الدوال validate، constraint، أدوات تحقق مخصصة، دعم الكائنات المتداخلة والمجموعات.
  • تعمل كلتا المكتبتين مع data class في Kotlin ولا تتطلبان انعكاس (reflection).

مثال كود بلغة 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 أو الويب.
  • الإعدادات: التحقق من صحة ملفات الخصائص عند بدء التطبيق.

استخدم Kotlinx.serialization للتسلسل/إلغاء التسلسل الأساسي، و Valiktor لقواعد العمل المعقدة (مثل التحقق من أن تاريخ البدء أقل من تاريخ الانتهاء).

توصيات