SurfGen
Задача
- Создать собственное решение для автоматизации рутинных задач
Решение
В основе философии нашей компании — не только создание технологичных мобильных приложений, но и постоянное профессиональное развитие и улучшение процессов разработки. Мы делаем собственное шоу на YouTube, ведём подкасты и пишем статьи на Хабре. В технических кейсах мы подробно описываем технологии, которые разработали для оптимизации внутренних процессов, ускорения сроков разработки и улучшения качества наших продуктов.
Один из таких инструментов — SurfGen.
Что такое SurfGen
SurfGen — это инструмент для автоматической генерации кода приложения. Он отвечает за запросы к серверу по API, который описан в формате Swagger (OpenAPI).
Он позволяет экономить время реализации сервисного слоя в приложении в 3–4 раза за счёт автоматизации рутинных задач.
API (Application Programming Interface) — это совокупность инструментов и функций в виде интерфейса для создания новых приложений, благодаря которому одна программа взаимодействует с другой.
Swagger (OpenAPI) — это экосистема инструментов. Она предоставляет интерфейс для сообщения между front-end системами, кодом библиотек и коммерческими решениями в виде API.
Зачем нужен SurfGen
Мы создали SurfGen, чтобы экономить время на написании кода для моделей запросов и ответов сервера. Это простой, но долгий и монотонный процесс, так как объём кода весьма внушительный. Разработчики тратили своё время на то, чтобы переписывать описание моделей и запросов из одного формата в другой. И мы решили автоматизировать этот процесс, создав собственный генератор. В первую очередь, генератор должен был избавить разработчиков от этой рутинной работы, а значит, освободить время для других задач.
Как мы придумали SurfGen
SurfGen появился как внутренний проект iOS-отдела. Новый инструмент показал свою эффективность, и мы решили, что его логичное развитие — поддержка генерации кода и для других платформ. Чтобы это стало возможным, нам понадобилось перенести всю платформозависимую логику из кода генератора в шаблоны и создать шаблоны для Android и Flutter.
iOS-разработчик Surf
В Android-разработке SurfGen уже доказал свою эффективность «в бою»: мы использовали его в проекте для сервиса быстрой доставки еды и ускорили разработку. В дальнейшем планируем применять наш генератор во всех новых проектах и улучшать удобство его использования.
Как работает SurfGen
SurfGen считывает переданное ему описание API и пытается построить модель со структурой каждого запроса (передаваемые параметры, ожидаемый ответ и т.д.).
Для получения готового кода используются шаблоны — файлы, содержащие «скелет» будущего кода. В этот «скелет» подставляются данные, полученные из спецификации API, и в итоге формируется код приложения, готовый к использованию. Шаблоны могут быть любыми, подставлять данные можно куда угодно. За счёт этого и достигается гибкость: при генерации кода для различных платформ меняются только шаблоны.
Ещё одна задача, которую решает SurfGen, — проверка файла с OpenAPI. Так как стандарт OpenAPI не отличается строгостью, часто документ с API становился громоздким и запутанным, в нём сложно отслеживать изменения. Мы решили эту проблему с двух сторон: во-первых, определили наш внутренний стандарт документа OpenAPI. Теперь он имеет одинаковый формат на разных проектах, поэтому разработчикам и аналитикам легко с ним работать. Во-вторых, SurfGen проверяет файл с OpenAPI на корректность. И по проверенному файлу можно генерировать код приложения.
Результат
Главную цель — избавить разработчиков от рутинных задач — SurfGen хорошо выполняет. Например, написание сетевого слоя для одного экрана (запросы и модели) раньше занимало 3–4 часа. С генератором же нужно только выполнить одну команду и затем проверить, корректно ли отработала программа. На это уходит меньше часа — в среднем минут 15, плюс ручные доработки, с которыми можно уложиться в 1 час.
Если оценивать сокращение времени разработки приложений в целом, то всё зависит от того, какую часть приложения составляет работа с сервером.
Сервисный слой приложения любого объёма поддаётся кодогенерации, с помощью одной команды можно гибко вносить изменения в существующий проект. Так, для каждого этапа, вместо рутинных задач с обновлением сервисного слоя вручную, с SurfGen будет лишь одна задача на выполнение перегенерации текущих файлов и финальной проверки.
iOS-разработчик Surf