Ruby on Rails бэкенд для мобильного приложения

TRUETECH занимается разработкой, поддержкой и обслуживанием мобильных приложений iOS, Android, PWA. Имеем большой опыт и экспертизу для публикации мобильных приложений в популярные маркеты Google Play, App Store, Amazon, AppGallery и другие.

Разработка и поддержка любых видов мобильных приложений:

Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

Это лишь некоторые из типы мобильных приложений, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента.

Услуги, которые мы предлагаем
Показано 1 из 1Все 1734 услуг
Ruby on Rails бэкенд для мобильного приложения
Средний
от 1 недели до 3 месяцев
Часто задаваемые вопросы

Наши компетенции:

Этапы разработки

Последние работы

  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    858
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    743
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1160
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    1034
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    968
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    562

Как Ruby on Rails ускоряет разработку серверной части мобильного приложения?

Мы выбираем Ruby on Rails для мобильного бэкенда, когда нужна скорость запуска MVP или стабильность в продакшене. Наш стек — API-only Rails 7, PostgreSQL, Redis и Sidekiq — проверен на проектах с 40 000+ пользователей. Экосистема Rails зрелая: гемы Devise, Pundit, Sidekiq, Active Storage — это production-ready инструменты с годами боевой проверки. Ruby on Rails — один из самых популярных фреймворков для быстрого создания API.

Почему ActiveRecord callbacks опасны для мобильного API?

after_create :send_push_notification в модели User — типичная ловушка. Каждый User.create! в тестах, rake-задачах или миграциях пытается отправить FCM-запрос. Мобильный клиент страдает от случайных push-уведомлений. Решение: выносить побочные эффекты в Service Objects или обработку событий через ActiveSupport::Notifications. Такой подход даёт предсказуемость и упрощает тестирование. Наша команда с 5+ летним опытом внедрила этот паттерн в 20+ проектах, что сократило количество багов на этапе отладки.

Как бороться с N+1 через сериализацию?

ActiveModelSerializers или jsonapi-serializer с has_many — если не передать includes:, каждый вложенный объект грузится отдельным запросом. Диагностируем через Bullet в development, фиксируем через includes(:association). Сравним подходы:

Инструмент Производительность Гибкость Поддержка
jsonapi-serializer Высокая (встроенные includes) Средняя Активная (community)
ActiveModelSerializers Низкая без оптимизаций Высокая Устаревшая

Для мобильного API jsonapi-serializer даёт прирост скорости в 5–10 раз на типичных запросах ленты, что напрямую снижает нагрузку на сервер и экономит затраты на инфраструктуру.

Как настроить JWT-аутентификацию для мобильного API?

  1. Установите гем devise-jwt или rodauth.
  2. Настройте модель User с jti полем (уникальный идентификатор токена).
  3. Создайте контроллер сессий, возвращающий access_token и refresh_token.
  4. Реализуйте middleware для проверки токена на каждый запрос.
  5. Используйте refresh_token для обновления сессии без повторного ввода пароля.

Devise быстрее интегрируется, но Rodauth даёт гибкость кастомной логики.

Пример конфигурации Rodauth:

Rodauth.configure do
  jwt_secret Rails.application.credentials.secret_key_base
  jwt_token_algorithm 'HS256'
  jwt_access_token_lifetime 15.minutes
  jwt_refresh_token_lifetime 1.year
end

Стек для мобильного API

Rails 7 API-only (rails new --api), PostgreSQL, Redis, Sidekiq для фоновых задач. Аутентификация — Devise с devise-jwt или Rodauth. Push-уведомления через гем rpush: поддерживает APNs (HTTP/2) и FCM, управляет connection pool и логирует доставку. Active Storage с S3-адаптером: для загрузки изображений используем presigned URL blob.service_url_for_direct_upload, что разгружает сервер.

Гем Скорость внедрения Гибкость Поддержка JWT
Devise + devise-jwt Высокая Средняя Да
Rodauth Средняя Высокая Да

Что даёт Russian Doll Caching для производительности API?

Фрагментное кеширование через cache(model) работает и в API-режиме через etag. Для агрегатов (счётчики лайков, рейтинги) используем Rails.cache с Redis, инвалидацию через after_commit. Rack::Attack защищает от rate limiting — настраиваем ограничения по IP и токену, чтобы мобильный клиент с зависшим retry не положил БД. Это снижает затраты на серверные ресурсы и ускоряет ответ.

Пример из практики

Lifestyle-приложение для iOS/Android, 40 000 MAU. Rails 6 API, PostgreSQL, Sidekiq. Endpoint /api/v1/feed — лента с постами, лайками, комментариями. Время ответа доходило до 1.2 секунды. Проблема: сериализатор подгружал связи отдельными запросами. Решение: переход на jsonapi-serializer с явным includes(:user) и counter_cache: true для лайков и комментариев. Результат: 80ms на типичной выборке 20 постов. Наши инженеры с опытом 5+ лет гарантируют аналогичные оптимизации. Свяжитесь с нами для обсуждения архитектуры вашего проекта. Закажите аудит текущего API — выявим узкие места за неделю.

Организация проекта

app/
├── controllers/api/v1/    — тонкие контроллеры
├── services/              — бизнес-логика
├── serializers/           — jsonapi-serializer
├── jobs/                  — Sidekiq-джобы
└── policies/              — Pundit для авторизации

Версионирование API через namespace (/api/v1, /api/v2) обязательно с первого дня. Мобильные клиенты обновляются медленно — старые версии живут 6–12 месяцев.

Что входит в нашу работу

  • Анализ требований и архитектура API
  • Реализация аутентификации (Devise/Rodauth + JWT)
  • Настройка push-уведомлений (APNs/FCM через rpush)
  • Организация хранения файлов (Active Storage + S3)
  • Кеширование и оптимизация запросов
  • Написание тестов (RSpec, Minitest)
  • Деплой и мониторинг (Heroku/AWS)
  • Документация API (Swagger/OpenAPI)

Сроки: MVP за 2–4 недели, полноценный бэкенд за 8–12 недель. Стоимость рассчитывается индивидуально. Получите консультацию — наши эксперты оценят ваш проект и предложат оптимальное решение.

Типичные ошибки в Rails API

Одна из распространённых проблем — использование callbacks для побочных эффектов. Вместо этого применяйте Service Objects. Отсутствие версионирования с первого коммита приводит к сложностям при обновлении клиентов. Слабое кеширование агрегатов (лайки, рейтинги) создаёт избыточную нагрузку на БД — внедрите Russian Doll Caching. Мы гарантируем надёжность и производительность вашего мобильного бэкенда.

Архитектура мобильных приложений

Приложение собрано в одном ViewController на 2000 строк. Сетевые вызовы, бизнес-логика, обновление UI — всё в одном месте. Добавить новую фичу без регрессии сложно, написать тест невозможно. Это не «плохой код» — это отсутствие архитектуры. И это встречается чаще, чем можно ожидать, даже в production-приложениях с миллионом пользователей.

Мы проектируем архитектуру под ключ: от выбора паттерна до полной структуры проекта с тестами и документацией. За 7–10 дней получаете чистый модульный код, готовый к масштабированию.

Архитектурные паттерны в мобайле решают одну задачу: отделить UI от логики так, чтобы каждая часть была тестируемой и заменяемой.

MVVM: базовый паттерн

Model-View-ViewModel — стандарт для iOS (SwiftUI + Combine/async, UIKit + Combine) и Android (Jetpack ViewModel + StateFlow + Compose). ViewModel содержит состояние UI и бизнес-логику. View только отображает состояние и передаёт намерения пользователя в ViewModel. Model — данные и их источник.

Ключевое правило: ViewModel не знает об UIKit или Android View-классах. Нет импортов UIKit, нет Context-зависимостей (кроме Application context через Hilt). Это гарантирует тестируемость: ViewModel тестируется как чистый Kotlin/Swift-код без Android Instrumented Test.

MVVM закрывает 70% потребностей. Остальные 30% — где нужна строгая изоляция фич, масштабирование команды, сложный flow управления состоянием.

Clean Architecture: когда MVVM недостаточно

Добавляет слои поверх MVVM:

Domain-слой — бизнес-логика, независимая от платформы. UseCase (или Interactor) содержит одно бизнес-правило: GetUserOrdersUseCase, PlaceOrderUseCase. Зависит только от интерфейсов (protocol/interface), не от конкретных реализаций.

Data-слой — реализация репозиториев. OrderRepositoryImpl реализует OrderRepository из domain. Знает про Retrofit, Room, UserDefaults. ViewModel не знает, откуда данные — из сети или кеша.

Presentation-слой — ViewModel + View. Знает о Domain, не знает о Data.

Dependency rule: зависимости направлены только внутрь. Domain не зависит ни от чего. Data и Presentation зависят от Domain.

Presentation → Domain ← Data

Это даёт возможность подменять реализацию: тест использует in-memory репозиторий вместо сетевого, интерфейс остаётся тем же.

Практическая оговорка: Clean Architecture добавляет файлы и слои. Для небольшого приложения это overhead. Оправдан от ~15 фич и при команде 3+ разработчиков.

BLoC для Flutter: предсказуемый поток состояний

BLoC (Business Logic Component) — стандартный паттерн в Flutter-сообществе. Библиотека flutter_bloc реализует его через два типа: Bloc (Event → State) и Cubit (State без Events, только методы).

Bloc обрабатывает Event и эмитирует новый State через on<EventType> хендлеры. Состояние иммутабельно — новый объект на каждое изменение. BlocBuilder перерисовывает только ту часть дерева, где изменился state.

// Event
abstract class CartEvent {}
class AddItemToCart extends CartEvent {
  final String productId;
  AddItemToCart(this.productId);
}

// State
abstract class CartState {}
class CartLoaded extends CartState {
  final List<CartItem> items;
  CartLoaded(this.items);
}

// Bloc
class CartBloc extends Bloc<CartEvent, CartState> {
  CartBloc(this._cartRepository) : super(CartLoaded([])) {
    on<AddItemToCart>(_onAddItem);
  }

  Future<void> _onAddItem(AddItemToCart event, Emitter<CartState> emit) async {
    final current = state as CartLoaded;
    final updated = await _cartRepository.addItem(event.productId);
    emit(CartLoaded(updated));
  }
}

Преимущество BLoC — тестируемость. blocTest из bloc_test пакета позволяет проверить: при таком-то Event, с таким-то начальным State, BLoC должен эмитировать такой-то State. Без UI, без моков для Flutter-фреймворка.

VIPER: для крупных iOS-проектов

VIPER (View, Interactor, Presenter, Entity, Router) — наиболее строгое разделение обязанностей для iOS. Каждый компонент имеет протокол и конкретную реализацию.

  • View — только UI, делегирует всё Presenter
  • Interactor — бизнес-логика, работа с сетью и данными
  • Presenter — посредник между View и Interactor, форматирует данные для View
  • Entity — модели данных (чистые структуры)
  • Router — навигация между модулями

Каждый модуль (экран или фича) — отдельный VIPER-модуль. Это исключает coupling между фичами и позволяет большим командам работать параллельно без конфликтов.

Цена: много файлов, много протоколов. Шаблонный код генерируется через Sourcery или кастомные Xcode-шаблоны. VIPER оправдан для приложений с 10+ разработчиками и 50+ экранами.

TCA (The Composable Architecture)

TCA от Point-Free — более современная альтернатива VIPER для iOS/macOS. Основные концепции: State (иммутабельное состояние фичи), Action (все возможные события), Reducer (State + Action → новый State + Effect), Store (хранит State, обрабатывает Actions).

Scope позволяет composable строить большие фичи из маленьких: родительский Reducer делегирует часть State дочернему. Каждая фича тестируется изолированно через TestStore с точным контролем над Effects.

TCA имеет крутую кривую обучения, но даёт предсказуемость, которую сложно получить другим способом: каждое изменение состояния — явный Action с конкретным источником.

Какой паттерн выбрать под вашу задачу?

Оценим проект за 1 день — подберём архитектуру с учётом размера команды, платформы и планов роста.

Паттерн Платформа Команда Когда выбирать
MVVM iOS, Android, Flutter 1–5 Стартовый стандарт, MVP, небольшие проекты
MVVM + Clean iOS, Android 3–10 Средние проекты, тестируемость критична
BLoC Flutter 2–8 Flutter с предсказуемым state management
VIPER iOS 5–20 Крупные iOS-проекты, модульная архитектура
TCA iOS/macOS 3–15 Строгая тестируемость, Swift Concurrency

Универсального ответа нет. Архитектуру выбирают под размер команды, требования к тестируемости и горизонт поддержки приложения.

Что входит в нашу работу

  • Аудит текущей архитектуры (если приложение уже существует) — выявим узкие места и регрессионные зоны.
  • Проектирование модульной структуры с чёткими границами слоёв и правилами зависимостей.
  • Создание каркаса проекта (Scaffold) с внедрением DI, организации папок и настройки линтеров.
  • Написание юнит-тестов для слоя домена и ViewModel — минимум 80% покрытия ключевых use case.
  • Подготовка документации — архитектурные диаграммы, README с правилами модификации кода, инструкция для онбординга новых разработчиков.
  • Передача рабочего репозитория с CI-пайплайном (GitHub Actions / Bitrise), настроенным запуском тестов и статическим анализом.

Всё это входит в стоимость проектирования. Дополнительно — поддержка на этапе внедрения: консультации команды, code review первых pull request.

Что происходит без архитектуры

Типичный сценарий через 18 месяцев без архитектуры: 40% времени разработки уходит на дебаг регрессий. Новый разработчик разбирается в коде неделю перед тем, как сделать первый PR. Тесты не пишутся, «потому что сложно мокировать». Добавление новой фичи требует понимания половины кодовой базы.

Выбор архитектуры на старте — это инвестиция с возвратом через 3–6 месяцев. По нашим данным, правильно спроектированная архитектура с MVVM + Clean даёт в 3 раза меньше регрессий по сравнению с монолитным ViewController. А затраты на её внедрение окупаются за 2–3 спринта.

Согласно рекомендациям Apple по проектированию приложений, разделение ответственности — ключевой фактор устойчивости кода (https://developer.apple.com/library/archive/featuredarticles/ViewControllerPGforiPhoneOS/ImplementingaViewController.html).

Почему стоит доверить архитектуру профессионалам?

Неправильный выбор паттерна на старте ведёт к переписыванию половины кода через год. Мы видели десятки проектов, где попытка сэкономить на архитектуре оборачивалась многомесячным рефакторингом. У нас за плечами 10+ лет коммерческой разработки, опыт работы с приложениями от 1 до 50 разработчиков. Мы помогаем избежать типовых ошибок:

  • Overengineering для простого MVP (назначаем MVVM, а не VIPER).
  • Отсутствие dependency injection — подключаем Hilt/Koin/Dagger уже на старте.
  • Игнорирование тестируемости — закладываем протоколы/интерфейсы с первого коммита.

Оценим ваш проект бесплатно — пришлите описание текущего приложения или идеи, и мы подберём оптимальную архитектуру за 1 день. Пишите в Telegram или на почту — в ответ вы получите архитектурную схему, план внедрения и смету.

Дополнительная таблица: сравнение затрат на внедрение

Паттерн Время проектирования Количество файлов на 1 экран Время написания тестов
MVVM 2–3 дня 5–7 1 день
MVVM + Clean 4–5 дней 10–12 2 дня
BLoC 3–4 дня 6–8 1.5 дня
VIPER 5–7 дней 12–15 2.5 дня
TCA 5–6 дней 8–10 2 дня

Время указано для команды из 2–3 разработчиков. С нашим шаблоном (generator) стартовый каркас готов за 1 день вне зависимости от выбранного паттерна.