Workflow SDK: сериализация пользовательских классов в Vercel

Команда Vercel представила обновление Workflow SDK, которое добавляет поддержку кастомной сериализации классов. Теперь разработчики могут передавать собственные экземпляры классов между функциями workflow и step-функциями, не беспокоясь о потере данных или необходимости вручную преобразовывать объек

Workflow SDK: сериализация пользовательских классов в Vercel

Команда Vercel представила обновление Workflow SDK, которое добавляет поддержку кастомной сериализации классов. Теперь разработчики могут передавать собственные экземпляры классов между функциями workflow и step-функциями, не беспокоясь о потере данных или необходимости вручную преобразовывать объекты. Это нововведение решает давнюю проблему и делает SDK более гибким, приближая его к возможностям полноценных фреймворков.

Что изменилось в Workflow SDK

Ранее Workflow SDK поддерживал сериализацию только стандартных типов JavaScript: примитивов, объектов, массивов, Date, Map, Set и других встроенных структур. Пользовательские классы не обрабатывались корректно, поскольку система сериализации не знала, как воссоздать их экземпляры. С появлением пакета @workflow/serde разработчики получили возможность определить два статических метода: WORKFLOWSERIALIZE и WORKFLOWDESERIALIZE. Первый отвечает за преобразование экземпляра в формат, пригодный для передачи, второй — за восстановление объекта из сериализованного представления.

Как реализовать кастомную сериализацию в своих проектах

Чтобы класс поддерживал сериализацию, необходимо реализовать два статических метода. Например, если у вас есть класс User, вы можете определить, как его сериализовать в плоский объект и как восстановить из него. Vercel привел пример использования этой возможности в своем продукте @vercel/sandbox, что значительно улучшило developer experience. После реализации методов экземпляры класса можно свободно передавать как аргументы и возвращаемые значения между workflow и step-функциями — система сериализации берет на себя всю работу по преобразованию.

Предыстория и контекст

Vercel активно развивает платформу для serverless-разработки, и Workflow SDK — один из ключевых инструментов для построения сложных многозадачных процессов. Поддержка кастомной сериализации решает давнюю проблему: ранее разработчикам приходилось либо избегать пользовательских классов в workflow, либо вручную преобразовывать их в простые объекты. Это усложняло код и снижало читаемость. Нововведение делает SDK более гибким и приближает его к возможностям полноценных фреймворков.

Чем это отличается от предыдущей версии

Раньше, если вы пытались передать экземпляр класса между функциями, SDK просто выбрасывал ошибку или терял информацию о типе. Теперь вы можете контролировать процесс: указываете, какие поля сохранять, как обрабатывать вложенные объекты и как восстанавливать экземпляр. Это особенно полезно для классов с вычисляемыми свойствами, методами или сложной логикой инициализации.

Технические подробности реализации

Пакет @workflow/serde предоставляет простой API: два статических метода, которые должны быть добавлены в класс. Метод WORKFLOWSERIALIZE принимает экземпляр и возвращает сериализуемое представление (обычно объект или примитив). Метод WORKFLOWDESERIALIZE принимает это представление и возвращает новый экземпляр класса. Важно, что методы должны быть статическими — они вызываются на самом классе, а не на экземпляре. Это позволяет системе сериализации работать даже с классами, которые еще не были инстанциированы. Vercel также опубликовал полный пример приложения, использующего @vercel/sandbox и Workflow SDK, чтобы разработчики могли изучить реализацию на практике.

Какие типы данных поддерживаются при сериализации классов

Система сериализации поддерживает не только простые поля, но и вложенные объекты, массивы, Map, Set и другие стандартные типы. Разработчик может контролировать, какие поля сохранять, а какие игнорировать, что особенно важно для классов с методами или вычисляемыми свойствами. При десериализации можно выполнять дополнительную валидацию или инициализацию, что делает процесс гибким и безопасным.

Кого затронет и как

Обновление в первую очередь полезно для разработчиков, использующих Vercel Workflow SDK для создания сложных serverless-приложений. Те, кто работает с предметно-ориентированными моделями (например, классы Order, User, Product), смогут передавать их между шагами workflow без дополнительных преобразований. Это упрощает код, уменьшает количество ошибок и повышает читаемость. В российском контексте это нововведение может быть особенно актуально для команд, строящих мультистейджинговые пайплайны или ETL-процессы на Vercel.

Как это повлияет на производительность serverless-приложений

Введение кастомной сериализации не должно существенно повлиять на производительность, так как методы сериализации и десериализации выполняются на стороне клиента. Однако разработчикам стоит избегать тяжелых вычислений в этих методах, чтобы не замедлять выполнение workflow. В целом, нововведение позволяет писать более чистый и поддерживаемый код, что косвенно улучшает производительность разработки.

Что будет дальше

Ожидается, что Vercel продолжит развивать Workflow SDK, добавляя поддержку более сложных сценариев сериализации, возможно, с циклическими ссылками или глубоким клонированием. Разработчики уже сейчас могут ознакомиться с документацией по сериализации и начать внедрять кастомные классы в свои проекты. В ближайших планах — расширение экосистемы и улучшение производительности.

Итог

Поддержка кастомной сериализации в Workflow SDK — важный шаг к упрощению разработки сложных serverless-приложений. Разработчики получили инструмент, который позволяет передавать собственные классы между функциями без потери данных и без ручного преобразования. Следите за обновлениями Vercel, чтобы использовать новые возможности в своих проектах.