
Swagger-генерация на Android. Часть 1. Выбираем инструменты и решаем проблемы
kartollika 14 минут назад Swagger-генерация на Android. Часть 1. Выбираем инструменты и решаем проблемы Средний 14 мин 307 Блог компании Dodo Engineering Android * Кейс Почти любое мобильное приложение общается с...
Anthropic — What company has the best second artificial intelligence model at the end of June?
В сфере искусственного интеллекта произошло заметное событие. kartollika 14 минут назад Swagger-генерация на Android. Выбираем инструменты и решаем проблемы Средний 14 мин 307 Блог компании Dodo Engineering Android * Кейс Почти любое мобильное приложение общается с бэкендом, а значит живёт по контракту — чаще всего в виде OpenAPI-схемы. Смотреть на неё удобнее всего в Swagger.
Пока проект маленький, изменения в API можно отслеживать вручную. Но по мере роста схемы и команды ручная проверка становится дорогой и начинает регулярно ломаться. Автогенерация из OpenAPI решает проблему, но в многомодульном Android-проекте всплывают нюансы: где хранить код, как не тянуть лишнее, как вписать сгенерённый код в архитектуру.
Технические детали
Меня зовут Дима Максимов, я Android-разработчик в Дринкит. В этом цикле из 2 статей я расскажу о том, как настроить генерацию из Swagger в Kotlin-код, и о том, как обуздать автогенерацию в условиях многомодульного проекта. The best wayСгенерировать код из Swagger просто в том случае, если:у вас нет строгих ограничений по виду проекта;сетевой код можно целиком сложить в одном месте.
С другой стороны – есть наш проект Дринкит. И тут мы сталкиваемся с несколькими сложностями одновременно:1) Отдельные модули под каждую фичу. Согласно принципам Clean Architecture, каждый наш модуль имеет разделение на -api (domain), -impl (data) и presentation.
В итоге проект имеет следующую структуру:root ├── infra │ ├── lib_1 │ ├── lib_2 │ └── ... └── contexts ├── common │ ├── cart │ │ ├── domain-api │ │ └── domain-impl │ └── ... ├── cart │ ├── domain-api │ ├── domain-impl │ └── presentation ├── product │ ├── domain-api │ ├── domain-impl │ └── view └── ...
Отраслевые последствия
И в каждом модуле примерно такая структура:cart ├── cart-api │ ├── build. gradle │ └── src/main/kotlin/ru/drinkit/common/cart │ ├── Cart. kt │ ├── ConsumeCartRepository.
other cart related domain classes └── cart-impl ├── build. gradle └── src/main/kotlin/ru/drinkit/common/cart ├── ConsumeCartRepositoryImpl. kt ├── api │ └── CartApi.
kt └── dto ├── CartDto. other cart related DTOs То есть в конкретном модуле лежат DTO-модели и сетевой интерфейс только конкретного домена. Для корзины — про корзину, для карточки продукта — про карточку.
Этот прогресс даёт важные сигналы о будущем отрасли, и технологический мир внимательно наблюдает.





