Node.JS & MongoDB: молниеносная быстрота создания прототипов

This post is also available in: Английский

nodejs

Те, кто разрабатывает мобильные приложения, обычно начинают думать о рабочем прототипе сразу же после создания предварительного макета. В контексте методологии Lean Startup и концепции минимально жизнеспособного продукта (MVP) не будет преувеличением сказать, что создание прототипа до момента принятия окончательных решений архитектурного плана жизненно важно для успеха проекта. Раньше у многих была удобная отговорка, что создание прототипа дело исключительно трудоемкое. Однако сегодня для большинства проектов разработки мобильных приложений это совсем не так. Разработав прототип, вы можете гораздо быстрее получить ценные отклики от своих пользователей, а значит, гораздо более осознанно переосмыслить архитектуру и динамику своего приложения.

В этой статье я хочу поделиться методологией, которой мы обычно придерживаемся в наших проектах. При разработке прототипов для наших новых приложений мы всегда используем сочетание Node.js и MongoDB. Это позволяет нам избежать существенных трудозатрат на разработку серверной части и получить готовый сервис всего за несколько недель. Более того, полученную архитектуру можно в дальнейшем масштабировать. Теперь давайте подробнее разберем наш подход на примере недавно запущенного приложения PhotoSuerte. Это приложение позволяет случайным пользователям общаться друг с другом, обмениваясь фотографиями. Предлагаю сразу перейти к делу, чтобы не тратить ваше драгоценное время. Прочитав эту статью, вы можете сразу приступить к созданию прототипа вашего следующего мегаприложения!

Итак, приложение PhotoSuerte основано на очень простой идее. Пользователь снимает фото и при помощи приложения отправляет его другому пользователю, выбранному случайно. Другой пользователь может отправить фотографию в ответ: так начинается фоточат. Некоторое время назад мы писали о том, как создать простейший чат, используя Node.js и Redis. Здесь у нас, правда, более сложные требования: мы должны поддержать учетные записи пользователей, историю чата, хранилище медиаданных и обеспечить управление сообщениями. Но даже такой обширный функционал вполне можно разработать на Node.js.

Причины выбора сочетания Node.js и MongoDB прекрасно изложены в этом видео.
Node.js отлично умеет обрабатывать множество событий без необходимости в сложной бизнес-логике. В большинстве случаев это действительно так, и на серверной части требуется реализовать всего несколько несложных вычислений и операций для обмена информацией с базой данных. Делегировав вопросы масштабируемости MongoDB, вы можете напрямую задуматься о динамике приложения.

Будем считать, что у вас есть идея приложения и мощная мотивация к его реализации. Конечно, что может быть лучше, чем дать своему приложению шанс показать себя во всей красе в AppStore! Именно поэтому нужно начать создавать прототип как можно раньше, еще до того, как дорисованы последние пиксели. Ну, а когда понадобится бэкенд для тестирования и разработки динамики приложения, вы сможете использовать Node.js и MongoDB. В этом случае у вас всегда под рукой будет простой обработчик запросов на базе JavaScript и легко масштабируемое хранилище данных. Такой подход позволит вам выиграть время и дождаться того момента, когда ваш проект наберет популярность и у вас появится больше времени и средств для инвестиций в бэкенд.

Пожалуй, самое заметное преимущество платформы Node.js заключается в том, что для нее написано тысячи готовых модулей с открытым кодом, и их можно подключить буквально за считанные секунды. Благодаря им я сэкономил много времени, а процесс разработки приложений стал гораздо более приятным. Ну, и самое главное, — вы можете проверить свои проектные допущения, дизайн своего приложения еще до завершения проектных работ. Тогда вы сможете обкатать на реальных пользователях не только дизайн и эргономику интерфейса, но и всю динамику приложения.

В нашем случае в базе данных есть всего две коллекции: Пользователи и Фотографии. Серверная часть Node.js выполняет следующие задачи:

  • аутентификация пользователей (Facebook, Twitter и ВКонтакте);
  • управление фотографиями, загружаемыми пользователями (облачное хранилище данных);
  • отправка фотографий пользователям;
  • отправка push-уведомлений;
  • отправка уведомлений по электронной почте.

В самом начале я бы предложил использовать в качестве базового фреймворка Express.js. На нем очень легко создавать приложения, да и архитектура у него очень гибкая. Так, после запуска приложения мы очень легко добавили веб-интерфейс системы управления контентом.

Для аутентификации в Социальных сетях можно использовать модуль Request. После аутентификации на стороне клиента можно очень легко загрузить профили Facebook/Twitter на стороне сервера. Также существуют другие плагины, предназначенные для решения различных задач: модуль APNS — для отправки сообщений APNS, плагин SMTP — для отправки уведомлений по электронной почте. Для управления процессами на бэкенде мы используем Supervisord.

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

То есть вам всего лишь нужно создать маршруты API-методов и соответствующие запросы к базе данных. Есть еще одно преимущество Node.js о котором не стоит забывать. Сопровождением кода JavaScript может заниматься практически любой разработчик даже с небольшим опытом объектно-ориентированного программирования.

Выводы 1. Знание современных методов разработки может существенно упростить работу над приложением. Это экономит время и позволяет сконцентрироваться на действительно важных задачах. 2. Node.JS — идеальное решение для большинства задач прототипирования на стороне сервера. Вы можете быстро реализовать необходимую логику на стороне сервера и сосредоточиться на удобстве сервиса для пользователей, а не на инженерных задачах, которые по большей части уже решены.

P.S. На самом деле, есть возможность еще ускорить развитие вашего серверного прототипа. Существует отличный фреймворк с открытым исходным кодом, который называется Deployd. Вы можете развернуть его в своей инфраструктуре или в облаке Deployd. В данном случае нужно просто настроить правила обработки данных для всех ваших методов API, используемых на бэкенде. Также не стоит забывать о Parse — облачной платформе, которая была сравнительно недавно приобретена Facebook. Так что, если вы собираетесь разработать новое приложение, способное потрясти мир, не откладывайте создание прототипа в долгий ящик.