Что такое сериализация данных и какие задачи она решает?

Ответ

Сериализация — это процесс преобразования сложных структур данных (например, объектов или моделей в памяти) в формат, пригодный для хранения или передачи по сети (например, в строку JSON, XML или поток байтов). Обратный процесс называется десериализацией.

Ключевые задачи, которые решает сериализация:

  • Передача данных по сети: Объекты преобразуются в текст (JSON) или байты для отправки через API-запросы между клиентом и сервером или между микросервисами.
  • Сохранение состояния (Persistence): Позволяет сохранять состояние объектов в файлы, кэш (Redis) или базы данных для последующего восстановления.
  • Межплатформенное взаимодействие: Стандартные форматы вроде JSON и XML являются языково-независимыми, что позволяет системам, написанным на разных языках, обмениваться данными.

Современные фреймворки (например, Django REST Framework, FastAPI, Pydantic) используют сериализаторы не только для преобразования данных, но и для:

  • Валидации: Проверки входящих данных на соответствие типам, форматам и бизнес-правилам.
  • Преобразования типов: Автоматического приведения строковых данных из запроса к нужным типам (int, datetime и т.д.).

Пример с Pydantic:

from pydantic import BaseModel, ValidationError

# Определяем "схему" данных с помощью класса-сериализатора
class User(BaseModel):
    id: int
    name: str
    is_active: bool = True

# 1. Десериализация и валидация входящих данных (JSON -> Объект)
json_data = '{"id": 123, "name": "Alice"}'
try:
    user_obj = User.parse_raw(json_data)
    print(f"Объект создан: {user_obj}")
except ValidationError as e:
    print(e)

# 2. Сериализация (Объект -> JSON)
json_output = user_obj.json()
print(f"Объект сериализован в JSON: {json_output}")