SurfGen

Решение от Surf, способное ускорить разработку за счёт автоматизации рутины

Задача

  • Создать собственное решение для автоматизации рутинных задач

Решение

В основе философии нашей компании — не только создание технологичных мобильных приложений, но и постоянное профессиональное развитие и улучшение процессов разработки. Мы делаем собственное шоу на YouTube, ведём подкасты и пишем статьи на Хабре. В технических кейсах мы подробно описываем технологии, которые разработали для оптимизации внутренних процессов, ускорения сроков разработки и улучшения качества наших продуктов.

Один из таких инструментов — SurfGen.

Что такое SurfGen

SurfGen — это инструмент для автоматической генерации кода приложения. Он отвечает за запросы к серверу по API, который описан в формате Swagger (OpenAPI). 

Он позволяет экономить время реализации сервисного слоя в приложении в 3–4 раза за счёт автоматизации рутинных задач.

API (Application Programming Interface) — это совокупность инструментов и функций в виде интерфейса для создания новых приложений, благодаря которому одна программа взаимодействует с другой.

Swagger (OpenAPI) — это экосистема инструментов. Она предоставляет интерфейс для сообщения между front-end системами, кодом библиотек и коммерческими решениями в виде API.

Как работает API

Зачем нужен SurfGen

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

Как мы придумали SurfGen

SurfGen появился как внутренний проект iOS-отдела. Новый инструмент показал свою эффективность, и мы решили, что его логичное развитие — поддержка генерации кода и для других платформ. Чтобы это стало возможным, нам понадобилось перенести всю платформозависимую логику из кода генератора в шаблоны и создать шаблоны для Android и Flutter. 

Первая версия SurfGen умела генерировать код только для iOS, но сейчас SurfGen стал гораздо более гибким, его можно использовать для Android и Flutter.
Дмитрий Демьянов

iOS-разработчик Surf

В Android-разработке SurfGen уже доказал свою эффективность «в бою»: мы использовали его в проекте для сервиса быстрой доставки еды и ускорили разработку. В дальнейшем планируем применять наш генератор во всех новых проектах и улучшать удобство его использования.

Как работает SurfGen

SurfGen считывает переданное ему описание API и пытается построить модель со структурой каждого запроса (передаваемые параметры, ожидаемый ответ и т.д.).

Работа генератора разделена на несколько последовательных этапов, образующих цепочку

Для получения готового кода используются шаблоны — файлы, содержащие «скелет» будущего кода. В этот «скелет» подставляются данные, полученные из спецификации API, и в итоге формируется код приложения, готовый к использованию. Шаблоны могут быть любыми, подставлять данные можно куда угодно. За счёт этого и достигается гибкость: при генерации кода для различных платформ меняются только шаблоны.

Как SurfGen работает с шаблонами

Ещё одна задача, которую решает SurfGen, — проверка файла с OpenAPI. Так как стандарт OpenAPI не отличается строгостью, часто документ с API становился громоздким и запутанным, в нём сложно отслеживать изменения. Мы решили эту проблему с двух сторон: во-первых, определили наш внутренний стандарт документа OpenAPI. Теперь он имеет одинаковый формат на разных проектах, поэтому разработчикам и аналитикам легко с ним работать. Во-вторых, SurfGen проверяет файл с OpenAPI на корректность. И по проверенному файлу можно генерировать код приложения.

Результат

Главную цель — избавить разработчиков от рутинных задач — SurfGen хорошо выполняет. Например, написание сетевого слоя для одного экрана (запросы и модели) раньше занимало 3–4 часа. С генератором же нужно только выполнить одну команду и затем проверить, корректно ли отработала программа. На это уходит меньше часа — в среднем минут 15, плюс ручные доработки, с которыми можно уложиться в 1 час.

Если оценивать сокращение времени разработки приложений в целом, то всё зависит от того, какую часть приложения составляет работа с сервером. 

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

Так мы решили основную задачу — создали инструмент, облегчающий работу с рутиной. Используя SurfGen, разработчики тратят гораздо меньше времени на выполнение тасков, связанных с API, тем самым высвобождая время для решения более трудоёмких стратегических задач. Мы продолжаем развивать SurfGen и добавляем в его инфраструктуру поддержку редких и неочевидных элементов API.
Дмитрий Демьянов

iOS-разработчик Surf

Давайте создадим мобильное приложение под ваши задачи вместе
Обсудить проект
Eng Обсудить проект