Сеть и коммуникации в мобильной разработке: что это, какие протоколы и как работает

Автор: IT Sectr Опубликовано: 2026-03-05 Время чтения: 10 мин

Сетевое взаимодействие и коммуникации — основа любого современного мобильного приложения, работающего с удалёнными данными. В этой статье разберём REST API, GraphQL, HTTP/HTTPS, WebSocket, популярные библиотеки (Retrofit, OkHttp, URLSession, Alamofire, Ktor, Dio), а также кэширование, офлайн-режим, пагинацию и безопасность соединений (SSL Pinning, TLS). Материал подойдёт начинающим разработчикам, которые хотят разобраться в сетевом стеке мобильных приложений. Подробнее — в обзоре HTTP от MDN.

Главное

  • REST API — наиболее распространённый архитектурный стиль для мобильных приложений (HTTP-методы + JSON)
  • GraphQL позволяет клиенту запрашивать только нужные поля, уменьшая объём передаваемых данных
  • WebSocket обеспечивает двустороннюю связь в реальном времени (чаты, уведомления)
  • Retrofit (Android) и URLSession (iOS) — стандартные инструменты для HTTP-запросов
  • Offline-First архитектура и правильная пагинация — ключ к стабильной работе при нестабильном соединении

Типы API: REST, GraphQL и WebSocket

Выбор типа API — первое решение, которое влияет на архитектуру сетевых коммуникаций всего приложения. Рассмотрим три основных подхода.

REST API

REST (Representational State Transfer) — архитектурный стиль, основанный на HTTP-методах GET, POST, PUT, PATCH, DELETE. Каждый ресурс имеет уникальный URL (эндпоинт). REST прост в кэшировании, интуитивно понятен и широко поддерживается. Ответы обычно возвращаются в формате JSON. Для мобильных приложений REST остаётся стандартом де-факто благодаря простоте и совместимости.

kotlin
// Пример REST запроса через Retrofit
interface ApiService {
    @GET("users/{id}")
    suspend fun getUser(@Path("id") id: Int): User
}

GraphQL

GraphQL — язык запросов от Facebook (Meta), где клиент сам указывает структуру ответа. Один эндпоинт, гибкие запросы, отсутствие overfetching (лишние данные) и underfetching (недостаточно данных). GraphQL особенно полезен для сложных вложенных данных (например, пользователь + его посты + комментарии). Недостатки: сложное кэширование, более крутая кривая обучения.

WebSocket

WebSocket — протокол полнодуплексной связи поверх TCP. После установки соединения (через HTTP-рукопожатие) обе стороны могут отправлять сообщения в любой момент. Используется для чатов, уведомлений, котировок, реалтайм-игр. В мобильных приложениях WebSocket часто сочетается с REST: REST для CRUD, WebSocket для реалтайм-обновлений.

Характеристика REST API GraphQL WebSocket
ТранспортHTTP/HTTPSHTTP/HTTPSTCP (после HTTP upgrade)
Формат данныхJSON/XMLJSON (запрос и ответ)Любой (JSON, Protobuf, текст)
НаправлениеОдностороннее (клиент → сервер)ОдностороннееДвустороннее (full-duplex)
КэшированиеВстроенное (HTTP cache)Сложное (требует Persisted Queries)Не применимо
Типичное применениеCRUD, списки, деталиСложные вложенные данныеЧаты, уведомления, live-данные

Основы HTTP/HTTPS и протоколов передачи

Понимание транспортного уровня необходимо для диагностики сетевых проблем и оптимизации производительности коммуникаций.

HTTP/HTTPS

HTTP (HyperText Transfer Protocol) — протокол прикладного уровня для передачи гипертекста. HTTPS — HTTP поверх TLS/SSL, обеспечивающий шифрование. Все современные мобильные приложения обязаны использовать HTTPS, так как Apple и Google требуют безопасные соединения (App Transport Security в iOS, network_security_config в Android).

TCP/IP и UDP

TCP/IP — надёжный протокол с установкой соединения, гарантией доставки и порядком пакетов. Используется для HTTP, WebSocket, почты. UDP — быстрый, но ненадёжный (без подтверждения доставки). Используется для стриминга, VoIP, игр, где важна скорость, а не гарантия доставки каждого пакета.

Заголовки и Content-Type

HTTP-заголовки управляют кэшированием (Cache-Control, ETag, Last-Modified), форматом данных (Content-Type: application/json), аутентификацией (Authorization: Bearer). Правильная работа с заголовками критична для производительности: ETag и Last-Modified позволяют избежать повторной загрузки неизменённых данных.

Сетевые библиотеки Android: Retrofit, OkHttp, Ktor, Volley

Android предлагает несколько популярных библиотек для сетевых коммуникаций. Выбор зависит от требований проекта.

Retrofit

Retrofit (от Square) — типобезопасный HTTP-клиент для Android и Kotlin. Превращает HTTP-API в интерфейс Kotlin/Java. Работает поверх OkHttp и поддерживает корутины, RxJava и Call-адаптеры. Retrofit — стандарт для Android-разработки.

OkHttp

OkHttp — низкоуровневый HTTP-клиент от Square. Используется как основа для Retrofit, но может применяться и самостоятельно. OkHttp предоставляет Interceptor (для логирования, заголовков, ретраев), HTTP/2 multiplexing, автоматическое восстановление соединения и пул соединений.

Ktor

Ktor Client — мультиплатформенный HTTP-клиент от JetBrains для Kotlin Multiplatform Mobile. Поддерживает Android, iOS, Web, Desktop. Нативная поддержка корутин, сериализации (kotlinx.serialization) и плагинов (логирование, аутентификация, WebSocket).

Volley

Volley — HTTP-библиотека от Google, популярная в старых проектах. Проста в настройке, автоматически управляет очередью запросов, поддерживает кэширование. Однако Volley не рекомендуется для новых проектов — Retrofit и OkHttp предоставляют больше возможностей и лучше интегрируются с современным Android-стеком.

В IT Sectr мы используем связку Retrofit + OkHttp для большинства Android-проектов с кастомными Interceptor для логирования, ретраев и аутентификации. Для KMM-проектов выбираем Ktor Client.

Сетевые библиотеки iOS: URLSession и Alamofire

iOS разработчики могут использовать нативный URLSession или сторонние библиотеки для сетевых коммуникаций.

URLSession

URLSession — нативный фреймворк Apple для HTTP-запросов. Поддерживает фоновые загрузки (background URLSession), WebSocket, протоколы делегирования, управление кэшем через URLCache. Начиная с iOS 15, URLSession поддерживает async/await, делая работу с сетью более удобной.

swift
func fetchUser(id: Int) async throws -> User {
    let url = URL(string: "https://api.example.com/users/\(id)")!
    let (data, _) = try await URLSession.shared.data(from: url)
    return try JSONDecoder().decode(User.self, from: data)
}

Alamofire

Alamofire — самая популярная сторонняя HTTP-библиотека для iOS. Предоставляет удобный API поверх URLSession: цепочки запросов, автоматическое преобразование JSON, валидацию, прогресс-загрузку, Multipart Upload. Alamofire особенно популярна в Objective-C проектах и при миграции с него на Swift.

Кроссплатформенные решения: Dio и Axios

Для Flutter и React Native существуют собственные популярные HTTP-клиенты для сетевых коммуникаций.

Dio (Flutter)

Dio — мощный HTTP-клиент для Flutter с поддержкой Interceptor, FormData, кэширования, таймаутов и retry-политик. Dio используется в большинстве Flutter-проектов как основная сетевая библиотека.

Axios (React Native)

Axios — HTTP-клиент для JavaScript/TypeScript, работающий в React Native. Предоставляет удобный API для запросов, перехватчиков (interceptors), автоматического преобразования JSON и отмены запросов через CancelToken.

Безопасность соединений: SSL/TLS и SSL Pinning

Безопасность сетевых коммуникаций — критически важная тема для мобильных приложений, работающих с персональными данными.

SSL/TLS

TLS (Transport Layer Security) — протокол шифрования, преемник SSL. Обеспечивает конфиденциальность, целостность и аутентификацию данных. Все мобильные приложения должны использовать TLS 1.2 или 1.3. Android и iOS запрещают незащищённые соединения (HTTP) по умолчанию.

SSL Pinning и Certificate Pinning

SSL Pinning — механизм, при котором приложение проверяет сертификат сервера против заранее сохранённого сертификата или публичного ключа. Это защищает от MITM-атак, даже если CA-центр скомпрометирован. Реализуется через OkHttp (Android) с CertificatePinner или через URLSession (iOS) с URLSessionDelegate. OWASP Mobile Top 10 рекомендует SSL Pinning для приложений, работающих с финансовыми или медицинскими данными.

Кэширование, офлайн-режим и пагинация

Современные мобильные приложения должны работать при нестабильном сетевом соединении. Стратегии кэширования и офлайн-режима — ключ к хорошему UX при ограниченных коммуникациях с сервером.

Кэширование

HTTP-кэширование использует заголовки Cache-Control (max-age, no-cache), ETag и Last-Modified. OkHttp и URLSession поддерживают кэширование из коробки. Дополнительно можно использовать Room или Core Data для кэша на уровне базы данных.

Offline-First архитектура

Offline-First — подход, при котором приложение сначала загружает данные из локального источника (кэш, БД), а затем обновляет их с сервера. Ключевые компоненты: локальное хранилище (Room, SQLite, Core Data), менеджер синхронизации (WorkManager для Android), мониторинг сети (ConnectivityManager, NWPathMonitor).

Пагинация

Для эффективной загрузки больших списков используется пагинация. Основные стратегии:

  • Offset-пагинация — page/limit параметры. Простая реализация, но нестабильная при добавлении/удалении записей.
  • Cursor-пагинация — передаётся ID или дата последнего элемента. Стабильна, рекомендуется для мобильных приложений.
  • Keyset-пагинация — комбинация полей для точного позиционирования.

Библиотека Android Paging 3 упрощает реализацию пагинации с поддержкой Room, Network и корутин. В iOS UITableViewDiffableDataSource + пагинация через URLSession — стандартный подход. В IT Sectr мы используем Paging 3 для Android и Combine-based пагинацию для iOS.

Retry Policy и Multipart Upload

При нестабильном соединении необходима стратегия повторных попыток (Retry Policy): exponential backoff, jitter, максимальное количество попыток. Для загрузки файлов используется Multipart Upload (большие файлы) или Chunked Transfer Encoding (потоковая передача). Библиотеки: OkHttp Interceptor для ретраев, Alamofire MultipartFormData для загрузки файлов.

Часто задаваемые вопросы

Что такое REST API и чем он отличается от GraphQL?

REST API использует HTTP-методы для работы с ресурсами по эндпоинтам. GraphQL — язык запросов, где клиент сам выбирает поля. REST проще в кэшировании, GraphQL эффективнее для сложных вложенных данных.

Какие библиотеки для сетевых запросов используются в мобильной разработке?

Android: Retrofit + OkHttp, Ktor, Volley. iOS: URLSession (нативная), Alamofire. Flutter: Dio, http. React Native: Axios, fetch. Выбор зависит от экосистемы.

Что такое SSL Pinning и зачем он нужен?

SSL Pinning — механизм, при котором приложение проверяет сертификат сервера против сохранённого сертификата или публичного ключа. Защищает от MITM-атак при компрометации CA-центра.

Как реализовать офлайн-режим (Offline-First)?

Offline-First: данные сначала загружаются из локального кэша, затем обновляются с сервера. Используются Room/SQLite для кэша, WorkManager для фоновой синхронизации, ConnectivityManager/NWPathMonitor для мониторинга сети.

Какие стратегии пагинации существуют?

Cursor-пагинация — надёжнее offset-based для мобильных приложений. Offset-пагинация (page/limit) нестабильна при добавлении записей. Рекомендуется cursor-based с бесконечной прокруткой.

Итоги

  • REST API — стандарт для мобильных приложений, GraphQL — для сложных вложенных данных
  • Retrofit + OkHttp (Android) и URLSession (iOS) — основные инструменты для HTTP-запросов
  • WebSocket обеспечивает двустороннюю связь и real-time коммуникации в реальном времени
  • SSL Pinning защищает от MITM-атак и обязателен для финансовых и медицинских приложений
  • Offline-First с кэшированием через Room/Core Data — современный стандарт UX
  • Cursor-based пагинация предпочтительнее offset-based для мобильных приложений
  • Retry Policy с exponential backoff повышает надёжность при нестабильном соединении

Мы разработаем мобильное приложение под ключ

IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.

Обсудить проект