TGViewer
10 минут до кода 10 минут до кода @ten_minutes_to_code · 228 subscribers
Post #125 86
Протоколы общения: Почему шкаф из IKEA не возят целиком

Когда наше приложение эволюционирует из простой функции в сложную систему, встает фундаментальный вопрос: как передать состояние между элементами системы?

Внутри кода мы оперируем ссылками на объекты в памяти, но как только данные должны покинуть пределы сервера и уйти в сеть по HTTP, ссылки превращаются в тыкву. В сетевом стеке не существует «объектов», там есть только поток байтов.

Инженерный подход здесь прост: раз всё в компьютерах в конечном счете сводится к файлам, а файлы — к тексту, значит, любой объект можно описать строкой. Так появилась сериализация.

Механика копирования, а не дегидрации

Существует опасное заблуждение, что сериализация — это своего рода «дегидратор»: засунули объект, высушили его до состояния сублимата, передали, а на другом конце «добавили водички» и получили тот же самый объект. Это не так.

На самом деле мы создаем Payload — детальное описание структуры и значений. Мы не перемещаем объект, мы отправляем инструкцию по его созданию на другой конец провода. В момент десериализации создается абсолютно новый инстанс. Да, он будет идентичен по данным, но в памяти это будет другой жилец. Сериализация — это всегда процесс создания слепка, а не телепортация оригинала.

Принцип плоской коробки

Чтобы визуализировать этот процесс, представьте огромный шкаф из IKEA. Пытаться перевезти его в собранном виде в другой город — это логистический кошмар и лишние траты.

Инженерное решение: разобрать шкаф, сложить детали в плоские коробки и отправить. Коробки — это и есть сериализованные данные. Они занимают минимум места и их легко транспортировать. А человек на той стороне, имея инструкцию (схему), соберет шкаф заново. Это и есть суть эффективной передачи данных.

Эволюция форматов: От XML к бинарному потоку

Раньше стандартом был XML. Он отлично справлялся с описанием сложных структур благодаря тегам, но подкапотка была тяжелой. Каждый «чих» сопровождался открывающим и закрывающим тегами. Когда у вас сотни полей, закрывающиеся теги превращаются в лишние килобайты данных, которые гоняются по сети впустую.

На смену пришел JSON (JavaScript Object Notation). Он выкинул визуальный шум XML, оставив лаконичную структуру «ключ-значение». Он читаем для человека, его легко парсить, и он весит значительно меньше. Для большинства публичных API это золотой стандарт.

Но если мы работаем в высоконагруженном продакшене, где важна каждая миллисекунда, даже JSON кажется избыточным. Зачем передавать названия ключей в каждом запросе, если структура и так известна обеим сторонам? Здесь в игру вступает Protobuf. Мы уходим от текста к чистым байтам. Данные передаются в бинарном виде, а клиент, имея заранее готовую схему, собирает их в объект. Максимальная экономия трафика и ресурсов процессора.

Безопасность сборки

Как инженер, ты должен помнить: десериализация — это точка входа для атак. Если ты бездумно собираешь объект из строки, присланной извне, ты рискуешь исполнить вредоносный код, который злоумышленник зашил в эту «инструкцию». Никогда не доверяй входящему потоку данных без жесткой валидации, особенно если речь идет о сложных структурах данных.

🔥 — если пост был понятен и полезен.

А если остались вопросы или что-то звучит слишком абстрактно — пиши в комменты, обязательно разберем!

10МДК | ВЕБМастер
  • 🔥 2
More from @ten_minutes_to_code
  1. May 28, 2026Первый сезон получился про путь “от пользователя к инженеру”. Именно эту картину мы весь с…
  2. May 28, 2026Когда я запускал этот канал, у меня была довольно простая идея: писать каждый день коротки…
  3. May 7, 2026Почему нормализация БД — это чистая логика, а не бюрократия На любом ongoing-проекте требо…
  4. May 3, 2026🤔 А где новые посты? Сори что вот так пропал без предупреждения, но я думал что справлюсь…
  5. Apr 29, 2026Почему HTTPS не спасет ваши секреты Замочек в адресной строке браузера — это мощное успоко…
  6. Apr 28, 2026Целостность данных против иллюзии атомарности Начинающий разработчик видит базу данных как…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →