Mobil geliştirmede veri serileştirme — nedir, biçimler ve çalışma prensibi

Yazar: IT Sectr Yayınlanma: 2026-03-08 Okuma süresi: 8 dk

Serileştirme, bir nesneyi veya veri yapısını ağ üzerinden iletim veya dosyaya kayıt için uygun sıralı bir biçime dönüştürme işlemidir. Ters işlem olan seri durumdan çıkarma, verileri orijinal durumuna geri yükler. MDN Web Docs'a göre, serileştirme herhangi bir işlemler arası iletişim için gereklidir. Serileştirme, REST API'lerinin, önbelleğe almanın ve uygulama bileşenleri arasında veri alışverişinin temelini oluşturur.

Temel Noktalar

  • Serileştirme — iletim veya depolama için bir nesneyi veri akışına dönüştürme
  • JSON — REST API'leri ve web iletişimi için ana metin biçimi
  • Protobuf — maksimum performans ve kompaktlık sağlayan ikili biçim
  • XML — Kurumsal ve Android geliştirme için doğrulama ile katı biçim
  • Biçim seçimi performans ve uyumluluk gereksinimlerine bağlıdır

Serileştirme nedir?

Serileştirme, RAM'de bulunan bir nesneyi ağ üzerinden iletilebilen, bir dosyaya kaydedilebilen veya başka bir işleme aktarılabilen doğrusal bir dizi bayt veya karaktere dönüştürme işlemidir. Serileştirme olmadan ağ iletişimi, durum kalıcılığı ve işlemler arası etkileşim imkansız olurdu.

Serileştirme iki karşıt süreç içerir. İleri yönlü süreç (serileştirme) verileri bir iletim biçimine paketler. Ters süreç (seri durumdan çıkarma) verileri nesneye geri yükler. Seri durumdan çıkarma güvenlik için kritiktir: yanlış girdi verileri uygulamada güvenlik açıklarına yol açabilir.

Mobil uygulama geliştirmede serileştirme her yerde kullanılır: sunucuya istek gönderme ve yanıtları işleme, ekran döndürmede uygulama durumunu kaydetme, diskte veri önbelleğe alma ve Intent (Android) veya Segue (iOS) aracılığıyla ekranlar arasında veri aktarma.

Serileştirmenin ana görevleri

  • Ağ iletişimi — istemci ve sunucu arasında veri aktarımı
  • Durum kalıcılığı — uygulama verilerini kaydetme ve geri yükleme
  • Önbelleğe alma — çevrimdışı erişim için istek sonuçlarını saklama
  • Çapraz platform — farklı dillerdeki sistemler arasında veri alışverişi
  • Günlükleme — günlüklere yazmak için nesneleri serileştirme

Ana serileştirme biçimleri

Serileştirme biçimleri, metin ve ikili olarak ikiye ayrılır. Metin biçimleri (JSON, XML) insan tarafından okunabilir ve görüntülemek için araç gerektirmez. İkili biçimler (Protobuf, FlatBuffers, MessagePack) daha kompakt ve hızlıdır, ancak seri durumdan çıkarma olmadan okunamaz. Biçim seçimi, performans ve hata ayıklama kolaylığı arasında bir dengedir.

JSON, XML ve Protobuf'un yanı sıra özelleşmiş biçimler de vardır: Google'dan oyunlar ve AR için FlatBuffers, MessagePack — JSON'a kompakt bir ikili alternatif, Apache'den Kafka'da büyük veri için Avro, YAML — yorum desteği olan bir yapılandırma biçimi.

Biçim Tür Şema Boyut Hız
JSON Metin İsteğe bağlı Orta Orta
XML Metin XSD Büyük Düşük
Protobuf İkili Zorunlu Küçük Yüksek
FlatBuffers İkili Zorunlu Küçük Maksimum
MessagePack İkili Hayır Küçük Yüksek
Avro İkili JSON Schema Küçük Yüksek

Mobil geliştirmede serileştirme

Mobil platformlarda serileştirmenin kendine özgü yönleri vardır: sınırlı trafik, daha zayıf işlemciler ve ekran dönüşlerinde durumu koruma ihtiyacı. Android'de Gson, Moshi, Kotlinx Serialization kullanılır. iOS'ta — Codable, JSONSerialization, PropertyListEncoder. Doğru kütüphane seçimi uygulama performansını kritik şekilde etkiler.

Kotlinx Serialization, Kotlin Multiplatform Mobile için JetBrains'in modern bir kütüphanesidir. JSON, Protobuf, CBOR ve özel biçimleri destekler. Kotlin Serialization eklentisi aracılığıyla derleme zamanında kod üretimi gerçekleşir ve yansıma kullanmadan yüksek performans sağlar.

Kotlinx Serialization (Kotlin Multiplatform)

Kotlinx Serialization kütüphanesi, sınıflar için @Serializable notasyonunu ve serileştiriciler oluşturmak için bir derleyici eklentisi kullanır. Bu, yüksek performans ve tür güvenliği sağlar. Varsayılan biçim JSON'dur, ancak ek modüller aracılığıyla diğer biçimler de desteklenir.

kotlin
import kotlinx.serialization.Serializable
import kotlinx.serialization.json.Json
import kotlinx.serialization.encodeToString
import kotlinx.serialization.decodeFromString

@Serializable
data class Project(
    val id: Int,
    val name: String,
    val platforms: List<String>,
    val active: Boolean
)

val json = Json {
    prettyPrint = true
    ignoreUnknownKeys = true
    encodeDefaults = true
}

fun main() {
    val project = Project(1, "MobileApp",
        listOf("Android", "iOS"), true)

    // Serileştirme
    val jsonString = json.encodeToString(project)

    // Seri durumundan çıkarma
    val restored = json.decodeFromString<Project>(jsonString)
}

iOS'ta Codable (Swift)

Codable protokolü, Swift'in yerleşik serileştirme mekanizmasıdır. Encodable (serileştirme) ve Decodable (seri durumdan çıkarma) protokollerini birleştirir. JSONEncoder ve JSONDecoder, iç içe yapıları, dizileri, isteğe bağlı değerleri ve CodingKeys aracılığıyla özel anahtarları otomatik olarak işler.

swift
import Foundation

struct AppConfig: Codable {
    let appName: String
    let version: String
    let features: [String]
    let isProduction: Bool
}

let config = AppConfig(
    appName: "MyApp",
    version: "2.1.0",
    features: ["push", "analytics", "offline"],
    isProduction: true
)

let encoder = JSONEncoder()
encoder.outputFormatting = [.prettyPrinted, .sortedKeys]

guard let data = try? encoder.encode(config) else { return }
let jsonString = String(data: data, encoding: .utf8)

Performans ve biçim karşılaştırması

Serileştirme biçimlerinin performansı üç ölçütle değerlendirilir: mesaj boyutu, serileştirme hızı ve seri durumdan çıkarma hızı. Mobil uygulamalar için her üçü de kritiktir: boyut trafiği ve yükleme süresini etkiler, hız arayüz yanıt verebilirliğini ve uygulama başlatma süresini etkiler.

Protobuf ve FlatBuffers, ikili temsil sayesinde en iyi sonuçları gösterir. FlatBuffers, ayrı bir seri durumdan çıkarma adımı gerektirmemesiyle öne çıkar — veriler dönüştürme olmadan doğrudan ikili arabellekten okunur, bu da onu minimum gecikme gereksinimi olan oyunlar ve AR uygulamaları için ideal hale getirir. JSON, daha düşük performansına rağmen, basitliği ve evrenselliği sayesinde REST API'leri için en popüler biçim olmaya devam etmektedir.

Senaryo Önerilen Biçim Neden
REST API JSON Evrensellik, okunabilirlik, destek
Mikroservisler Protobuf Kompaktlık, hız, gRPC
Oyunlar / AR FlatBuffers Zero-copy, minimum gecikme
Büyük Veri Avro Kafka ve Hadoop ile uyumluluk
Yapılandırma YAML Yorumlar, okunabilirlik
Android düzenleri XML Platform standardı

Kıyaslama testi

1000 kullanıcı nesnesinden oluşan bir veri kümesi üzerinde yapılan pratik testler gösteriyor: Protobuf 12 KB mesaj oluşturuyor (JSON — 85 KB, XML — 120 KB). Serileştirme süresi: Protobuf — 2 ms, JSON — 8 ms, XML — 25 ms. Bu rakamlar, ikili biçimleri yüksek yüklü sistemler ve sınırlı trafiğe sahip mobil uygulamalar için tercih edilir kılmaktadır.

Veri serileştirme örnekleri

Örnekler, aynı nesnenin farklı biçimlerde serileştirilmesini gösterir. Bu, boyutu ve okunabilirliği görsel olarak karşılaştırmaya yardımcı olur. Aynı User nesnesi JSON, XML ve Protobuf'ta serileştirilecek — JSON'un XML'den daha kompakt olduğu ve Protobuf'un en kompakt ve okunamaz olduğu açıkça görülecektir.

Üç biçimde tek bir nesne

JSON — minimalist sözdizimi, tırnak içinde anahtarlar, farklı türlerde değerler. 80 karakter kaplar. Okunabilirlik yüksek, görsel yapı net. Geliştirme ve hata ayıklama hızının önemli olduğu API'ler için uygundur.

XML — her öğe açılış ve kapanış etiketleriyle sarılır. 150 karakter kaplar. Okunabilirlik orta, yapı katı. Belge iş akışları ve XSD doğrulaması gerektiren sistemler için uygundur.

Protobuf — ikili, bu veriler için 32 bayt. Okunamaz — görüntülemek için seri durumdan çıkarma gerekir. Minimum boyutuyla yüksek yüklü sistemler ve mobil uygulamalar için idealdir.

json
{
  "id": 42,
  "name": "IT Sectr",
  "email": "team@itsectr.com",
  "role": "admin",
  "active": true
}
xml
<user>
    <id>42</id>
    <name>IT Sectr</name>
    <email>team@itsectr.com</email>
    <role>admin</role>
    <active>true</active>
</user>

Serileştirme en iyi uygulamaları

En iyi uygulamalar, yaygın hatalardan kaçınmanıza ve projeniz için doğru serileştirme stratejisini seçmenize yardımcı olur. Bu önerilere uymak performansı, güvenliği ve kod bakımını iyileştirir.

Mobil geliştirme için öneriler

  1. Senaryoya göre biçim seçin — REST API'leri için JSON, gRPC ve mikroservisler için Protobuf
  2. Java Serializable'dan kaçının — yavaş ve güvensiz mekanizma, Kotlinx Serialization veya Moshi kullanın
  3. Bilinmeyen anahtarları yok sayın — modelde olmayan alanları atlamak için ayrıştırıcıyı yapılandırın
  4. Seri durumdan çıkarılan verileri önbelleğe alın — aynı verileri tekrar tekrar ayrıştırmaktan kaçının
  5. Girdi verilerini doğrulayın — seri durumdan çıkarma sırasında sınırları ve türleri kontrol edin

Güvenlik ve serileştirme

Serileştirme güvenliği, özellikle güvenilmeyen kaynaklardan gelen verilerin seri durumdan çıkarılması söz konusu olduğunda kritik derecede önemli bir husustur. Seri durumdan çıkarma saldırıları, web ve mobil uygulamalardaki en tehlikeli güvenlik açıklarından biri olan uzaktan kod yürütmeye (RCE) yol açabilir. En bilinen vakalar Java Serializable ve Python pickle ile ilgilidir.

Protobuf ve JSON, bu tür saldırılara karşı yerleşik korumaya sahiptir, çünkü yalnızca verilerle çalışırlar, rastgele nesnelerle değil. Buna karşılık, Java Serializable, classpath'te bulunan herhangi bir sınıfı geri yükleyebilir ve bu da onu harici kaynaklardan veri almak için tehlikeli hale getirir. Android'de, standart Java Serialization yerine Kotlinx Serialization veya Moshi kullanılması önerilir.

Ek güvenlik önlemleri: girdi verisi boyutuna bir sınır belirleyin, seri durumdan çıkarmadan önce şemayı doğrulayın, HTTP başlıklarındaki Content-Type'a güvenmeyin, izin verilen sınıflar için bir beyaz liste kullanın. Serileştirme kütüphanelerini düzenli olarak güncelleyin, çünkü güvenlik açıkları periyodik olarak keşfedilir ve düzeltilir.

Sıkça sorulan sorular

Serileştirme ve marshalling arasındaki fark nedir?

Serileştirme bir nesneyi bayt dizisine dönüştürürken, marshalling türleri ve yapıyı koruyarak verileri farklı adres alanları arasında aktarır. Marshalling, sürecin bir parçası olarak serileştirmeyi içerir, ancak referans kodlaması ve bellek yönetimini de içerebilir.

Hangi serileştirme biçimi en hızlıdır?

Google'ın FlatBuffers'i, sıfır kopyalı seri durumdan çıkarma sayesinde maksimum hız sağlar — veriler dönüşüm olmadan doğrudan ikili arabellekten okunur. Protobuf ikinci sırada, JSON üçüncü sıradadır. XML, yaygın biçimler arasında en yavaş olanıdır.

Android için ne seçmelisiniz: Gson, Moshi mi yoksa Kotlinx Serialization mu?

Kotlinx Serialization, yeni Kotlin projeleri için en iyi seçimdir: derleyici üretimi, Kotlin Multiplatform desteği, null safety. Moshi, Java projeleri için iyi bir seçimdir, Gson'dan daha performanslıdır. Gson, başlamak için en basit kütüphanedir ancak daha yavaştır ve yansıma kullanır.

Döngüel referanslara sahip bir nesne nasıl serileştirilir?

Döngüel referanslar, serileştirme sırasında sonsuz özyinelemeye yol açar. Çözümler: doğrudan nesne referansları yerine ID referansları kullanın, özelleşmiş serileştirme adaptörleri uygulayın (örn. Jackson'da @JsonIgnore) veya döngüleri ortadan kaldırmak için veri modelini yeniden tasarlayın.

Serileştirme uygulama güvenliğini etkiler mi?

Evet, özellikle güvenilmeyen verilerin seri durumdan çıkarılması. Seri durumdan çıkarma güvenlik açıkları, uzaktan kod yürütmeye yol açabilir. Öneriler: güvenilmeyen kaynaklardan gelen verileri seri durumdan çıkarmayın, seri durumdan çıkarma sırasında bir sınıf beyaz listesi kullanın ve işlemeden önce veri şemasını doğrulayın.

Özet

  • Serileştirme nesneleri iletim ve depolama için veri akışına dönüştürür, seri durumdan çıkarma onları geri yükler
  • JSON REST API'leri için standarttır, XML belge iş akışları için, Protobuf mikroservisler ve yüksek yük için
  • İkili biçimler (Protobuf, FlatBuffers) metin biçimlerinden 3–10 kat daha kompakt ve hızlıdır
  • Android'de Kotlinx Serialization önerilir, iOS'ta — yerleşik Codable
  • Seri durumdan çıkarılan verileri önbelleğe alma CPU yükünü azaltır ve uygulamayı hızlandırır
  • Seri durumdan çıkarma güvenliği kritiktir — girdi verilerini doğrulayın ve beyaz liste kullanın
  • Biçim seçimi okunabilirlik, performans ve uyumluluk arasında bir dengedir

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun