Введение 3
Обзор аналогов 7
Реализация проекта 15
1. Выбор инструментов и технологий 15
2. Разработка 18
2.1 Внедрение микросервисной архитектуры 18
Service Discovery 19
Zuul Service 20
Home-service и Create-service 21
2.2 Генерация backend-части 22
Generation service 25
Json service 30
File Service 31
Заключение 32
Глоссарий 34
Список использованной литературы 36
Приложение 40
В последнее время мобильная разработка становится все более популярной в сфере IT - технологий. Так , по данным аналитического агенства «App Annie»[1], В 2018 году в Apple App Store и Google Play было зафиксировано 113 млрд загрузок приложений и игр на сумму $76 млрд, что соответственно на 10% и 20% больше показателей годичной давности [2].
Рост рынка мобильных приложений исследователи связывают с увеличением расходов потребителей на игры, которые являются наиболее прибыльным источником доходов для разработчиков. Еще одним «двигателем» рынка мобильных приложений стали подписки, когда пользователи ежемесячно платят за доступ к каким-либо функциям или контенту. Именно эта бизнесмодель, как считают эксперты, будет способствовать росту потребительских расходов в магазинах приложений в 2019 году, в результате чего продажи ПО для смартфонов и планшетов подскочат до $122 млрд.
Так как доля мобильного рынка увеличивается с каждым годом - растет и спрос на создание проектов под мобильные платформы. В исследовании агенства «App Annie» также приводятся списки самых скачиваемых приложений на двух лидирующих платформах рынка: Android и IOS
Если не брать во внимание игры, так как их можно считать отдельным видом мобильных приложений, можно заметить, что все места с 1 по 10-ое занимают приложения, которые так или иначе оперируют с большими объемами данных, имеют механизмы авторизации пользователя и, что самое главное, являются клиент-серверными программами, а следовательно, требуют для своей работы наличие некого удаленного сервера, хранящего и обрабатывающего данные. Чаще всего подобные серверные решения реализованы на основе принципа RESTfull - API.
На данный момент цена создания только одного мобильного приложения по данным digital-агенства «Tagline»[3] находится в пределах от 400 тыс. до 10 млн. рублей. Учитывая этот факт и сказанное выше, разработка комплексного клиент - серверного решения, с реализацией мобильного приложения и backend-части это дорогое мероприятие, особенно если учитывать сложности при разработке сразу двух проектов, например: невыполнение сроков при разработке серверной части - а следовательно и торможение разработки мобильного приложения, и наоборот. К тому же, в процессе создания проекта мобильной части может понадобится тестирование компонентов приложения, использующих еще нереализованные части backend - стороны.
Если принять во внимание и тот факт, что в большинстве своем современные мобильные приложения хоть и нуждаются в некоем стороннем API, чаще всего это простое серверное решение для хранения данных и тривиальных манипуляций с ними, то можно сделать вывод, что проблему создания backend - части для большинства приложений можно устранить неким универсальным решением (далее - проект). Цель данной выпускной квалификационной работы - создание данного проекта, отвечающего следующим требованиям:
1. Взаимодействие клиента с кодом при работе с проектом должно быть сведено к минимуму.
2. Должна быть доступна реализация всех принципов REST-api.
3. Должна быть возможность развернуть backend-часть на серверах проекта.
4. Должна быть доступна реализация авторизации пользователей.
5. Должна быть функция передачи готовой backend-части клиенту в удобном виде (форматы jar, war и т. п.)
6. Проект должен быть бесплатным opensource - решением.
В результате выполнения выпускной квалификационной работы был разработан сервис, позволяющий быстро и не прибегая к написанию кода сделать готовый к работе сервис, с заранее заданными функциями и сущностями. Также была разработана достаточно гибкая структура описания сервиса, которая позволяет клиенту быстро настроить и сгенерировать необходимое приложение.
Генерация приложения занимает мало времени, при тестовом запуске на 150 сущностей, каждая из которых имеет в среднем 20 полей, проект сгенерировал приложение меньше чем за минуту (приблизительно 53.3 сек.) Таким образом данный проект является отличным решением, если необходимо быстро создать тестовый сервер для тестирования мобильного приложения, веб-сервиса и так далее.
Также, сгенерированное приложение имеет удобную и понятную архитектуру, и может быть передано клиенту в виде кода и/или в виде файла расширения .jar, что позволяет клиенту не только использовать готовый сервис, но модифицировать его и поддерживать в будущем.
Сам же проект является opensource решением, и будет распространяться бесплатно. Данная особенность дает перспективы на улучшение проекта со стороны community и заинтересованных пользователей. Ближайшие же планы на развитие проекта включают в себя:
1. Возможность добавлять код, написанный пользователем, в слой бизнес-логики приложения, для более тонкой настройки сервиса более опытными пользователями.
2. Возможность разбить генерируемое приложение на микросервисы.
3. Возможность выбора языка для генерации, чтобы охватить потребности как можно большего числа пользователей. Ближайший кандидат на реализацию - язык программирования Python.
В процессе выполнения данной работы также были исследованы аналоги данного проекта, были выявлены их плюсы и минусы и возможность применения в различных ситуациях.
Также были изучены новые технологии, такие как:
• Микросервисная архитектура, ее настройка и принципы. В ее рамках также были изучены паттерны Service Discovery и Gateway API, а также их реализации от компании Netflix в виде инструментов Zuul и Eureka, встроенных во фреймворк Spring.
• Кодогенерация, применение библиотеки JavaPoet для читаемого и поддерживаемого кода.
• Были освежены и дополнены знания фреймворка Spring, в частности Spring Boot.